2017-01-25 4 views
0

Ich habe eine Beziehung zwischen zwei Komponenten/Microservices, wo Komponente A Ereignisse per HTTP an Komponente B sendet. In einem traditionellen HTTP-HTTP-Verbraucher/Provider-Muster ist A der Konsument von B, da A die Anfrage sendet und B antwortet. In diesem Fall ist B jedoch der wirkliche Konsument der Ereignisse, die A bietet.pact HTTP message consumer

Gibt es eine Möglichkeit, die Consumer/Provider-Tests so zu implementieren, dass der Consumer-Test auf der Empfängerseite (B) und nicht auf der Sendeseite geschrieben werden kann?

Ich habe gesehen, dass Nachrichtenpakte eingeführt wurden, die klingen, als könnte es in diesem Szenario verwendet werden, aber ich habe keine leicht verständlichen Beispiele gesehen, wie dies implementiert ist und ob es in Verbindung mit HTTP verwendet werden kann in meinem Szenario.

Ich benutze Pact-jvm-Junit.

Antwort

2

Sie haben zwei Bedeutungen skizziert, in denen der Begriff Verbraucher/Anbieter verwendet werden kann - das HTTP-Verbraucher/Anbieter-Paar und der Verbraucher/Anbieter der Daten selbst.

Pact verwendet nur die HTTP Verbraucher/Anbieter Sinn der Wörter, weil Sie den Mock nicht wirklich in umgekehrter Reihenfolge einrichten können. Sie können Pact immer noch genau so verwenden, wie Sie es normalerweise tun würden - tatsächlich war das erste Projekt, das Pact verwendete, eines, bei dem die Daten vom Javascript-Client zum Backend-Server flossen.

Die meisten HTTP-Consumer/Provider-Paare verfügen ohnehin über einen bidirektionalen Datenfluss. Es ist eine seltene App, die nur gelesen werden kann. Anstatt es als "Wie kann ich als Konsument der Information die Daten empfangen" zu verstehen, denken Sie darüber nach wie "Wie übertrage ich als Absender dieser Daten die Übertragung an den Empfänger? ".

+0

Ich hatte diesen Ansatz zunächst. Mein Problem ist meiner Meinung nach, dass es gegen den Grundsatz der verbraucherorientierten Verträge verstößt. Komponente A wurde von einem anderen Team entwickelt und ist noch in Arbeit. Als Verbraucher von A-Ereignissen möchte ich einen verbrauchergesteuerten Vertrag in B erstellen, um A mitzuteilen, was ich von den Ereignisdaten erwarte, damit das Team, das A entwickelt, sicherstellt, dass es meinen (B-) Erwartungen entspricht. A verbraucht wirklich nichts von B außer einer 204 Antwort. Wenn wir es in diese Richtung implementieren, würden wir den testgetriebenen/verbraucherorientierten Aspekt und seine Vorteile verlieren. –

+0

Idealerweise hätte ich gerne eine Http-erweiterte Variante des MessagePact. Als Experiment habe ich versucht, meine Tests stattdessen mit den MessagePacts zu implementieren, und es ist möglich, obwohl ich nur den Nachrichtenteil (Body) validieren kann und die HTTP-spezifischen Teile des Pakts und die Validierungen desselben verlieren würde. –

+0

Ja, Sie sind in einem schwierigen Szenario dort. Ich bin mir nicht sicher, ob Pact dir viel helfen kann. Bei dem ersten Dienst, für den ich erwähnte, dass Pact verwendet wurde, entwickelte das gleiche Team sowohl den Verbraucher als auch den Anbieter, also gab es nicht das gleiche Problem. –

Verwandte Themen