Auf der Herstellerseite können die Verbraucher über einen Ordner verfügen, der nur Verträge enthält, die sich auf sie beziehen. Wenn wir das Flag stubrunner.stubs-per-consumer auf true setzen, registrieren wir nicht mehr alle Stubs, sondern nur solche, die dem Namen der Consumeranwendung entsprechen. Mit anderen Worten, wir scannen den Pfad jedes Stubs und, wenn er einen Unterordner mit dem Namen des Verbrauchers im Pfad enthält, wird er erst dann registriert. Die Bindungsdefinition bindet die Warteschlange mit dem Namen test.queue. Daher wird die folgende Listenerdefinition mit der Vertragsnachricht abgeglichen und aufgerufen: Das Entwerfen von Schnittstellen für Dienste ist für die erfolgreiche Dienstentwicklung von entscheidender Bedeutung. Der Service unterstützt eine eigene Geschäftsfunktion, ein klares und autonomes Geschäftskonzept. Beispielsweise unterstützen Dienste wie ein Kreditkartenvalidierungsdienst, Sparkontoservice und Aktienticker-Service dieses Konzept. Die Modularität und Schnittstellendefinition eines modularen Dienstes wurde im vorherigen Kapitel erläutert. Der Prozess der Definition der Schnittstelle und Attribute der Schnittstellen, die erfasst werden müssen, wird am besten durch die Prinzipien der “Design by Contract”-Methode von Bertrand Meyer (1997) und erweitert von Richard Mitchell und Jim McKim (2001) angegangen. Der Vertrag ist semantisch gleichbedeutend mit einem Hoare-Triple, das die Verpflichtungen formalisiert. Dies lässt sich durch die “drei Fragen” zusammenfassen, die der Designer im Vertrag immer wieder beantworten muss: In einem Test können Sie einen ContractVerifierMessageExchange injizieren, um Nachrichten zu senden und zu empfangen, die dem Vertrag folgen. Fügen Sie dann @AutoConfigureMessageVerifier zu Ihrem Test hinzu.

Das folgende Beispiel zeigt, wie dies zu tun: Verträge und Stubs können an einem Speicherort gespeichert werden, wo jeder Produzent seinen eigenen, dedizierten Ordner für Verträge und Stub-Mappings hat. Unter diesem Ordner kann jeder Consumer über ein eigenes Setup verfügen. Damit Stub Runner den dedizierten Ordner aus den bereitgestellten IDs finden kann, kann man eine Eigenschaft stubs.find-producer=true oder eine Systemeigenschaft stubrunner.stubs.find-producer=true übergeben. Das Senden einer Anfrage wie der im Anfrageteil des Vertrags dargestellten ergibt das Senden des folgenden Antworttextes: Die Nachricht hat ein Ziel von contract-test.exchange, so dass die FrühjahrS-AMQP-Stub-Runner-Integration nach Bindungen im Zusammenhang mit diesem Austausch sucht, wie das folgende Beispiel zeigt: Schreiben Ihrer eigenen Implementierung der org.springframework.cloud.contract.stubrunner.StubDownloaderBuilder für die vollständige Anpassung Während Eiffel, die von Meyer bevorzugte Sprache, explizit Verträge unterstützt, müssen wir explizit andere Wege finden. Es stehen sowohl kommerzielle Java-Erweiterungen (z.B. JContract [URL:JContract] und JWAM-Contract [URL: JWAM]) als auch mehrere kostenlose Java-Erweiterungen (z.B. [URLd:IContract]) für DBC-Anwender zur Verfügung.10 Eine interessante Alternative ist die Verwendung der Vertragsteile für den Bau oder die Erweiterung unserer Komponententests: Das HTTP-Protokoll erfordert nur die Methode und die URL, die in einer Anfrage angegeben werden.