Kommunikation zwischen zwei Microservices
Ich bin erstellen Sie ein Projekt mit microservices-Architektur. Und ich habe zwei microservices.
Einer von Ihnen ist für product-Entität, die andere ist für bill Entität. Sie haben Ihre eigenen Endgeräte, und Sie verbunden sind, zusammen mit dem gateway (ich bin mit jhipster microservices-Architektur).
Rechnung-ms sollte Zugriff auf die Liste der Produkte. Ich Frage mich, wie kann ich die Kommunikation zwischen diesen beiden ms. Ich habe drei Ansätze, die in meinem Geist:
- Senden Sie eine Anfrage von bill-ms-queue - wie rabbitMQ, um diese Produkte mit diesen ids von Produkt-ms (ich weiß nicht, was ist der Flaschenhals)
- Senden Sie eine Anfrage an gateway für Produkt-service und das Produkt von dort aus (ich mache mir sorgen um die Latenzzeit wegen der Größe der Daten zwischen Ihnen und auf diese Weise ich bin nicht berühren die Datenbank direkt, so dass ich immer davon abhängen, gateway)
- Kann ich Dupliziere die repositories, Dienste und Einrichtungen in der bill-ms (es ' s eine hässliche Art und Weise, und ich denke, es bricht die Regel der ms-Architektur und die Wartung ist sehr schwierig)
Wenn Sie irgendwelche anderen Ansätze, die ich schätzen Sie, es zu teilen mit mir.
Bearbeiten
- Jetzt weiß ich, was der Engpass ist: sagen, dass es 3-Instanz, die von bill-ms und wie funktioniert rabbitMQ entscheiden, welche Instanz zu reagieren? oder wie soll ich sagen, die Band "mir den freien Fall der bill-ms zu abonnieren, um die Anforderung von rabbitMQ" für das load balancing.
InformationsquelleAutor der Frage SerhatTR | 2016-04-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin mir nicht sicher, ob das, was ich dabei bin zu Antworten ist die richtige Art und Weise. Ich bin immer noch lernen, mich selbst.. Aber ich kann dir sagen, wie ich schon umgesetzt mein microservices versucht..
Ersten, begann ich mit
HTTP
Kommunikation basierte microservices mit diesem blog. Dies funktioniert gut, aber das problem ist, dass Sie erstellen Abhängigkeit zwischen Ihre Dienstleistungen. Service Eine muss bewusst sein, ein service B und aufrufen muss direkt (über service discovery etc. natürlich). Dies ist, was Sie in der Regel versuchen zu vermeiden, die bei der Entwicklung von microservices.Anderen Ansatz, den ich angefangen habe mit in letzter Zeit, ist mit einem
message bus
. Es ist eigentlich die 3. option, die Sie berührt, die in Ihrer Frage.Ich habe eine service Einewelche Personen (nur ein Beispiel). Was der Dienst tut, wenn es schafft eine neue person ist: Er sendet einen
event
auf eineRabbitMQ
bus:personCreatedEvent
.Wenn es irgendwelche anderen Dienstleistungen, die interessiert an Veranstaltungen wie diese, können Sie abonnieren zu Ihnen. Diese interessiert Dienstleistungen, die halten die relevanten Informationen, dass Sie daran interessiert sind, in Ihren eigenen Datenspeichern.
Mit diesem letzten Ansatz, es gibt nicht wirklich eine Abhängigkeit zwischen Ihre Leistungen, da Sie nicht direkt miteinander kommunizieren. Service Eine ist nicht bekannt, service Bweil B nur sendet Ereignisse an
RabbitMQ
zu welcher Dienstleistung interessiert ist, diese Ereignisse und Umgekehrt.Natürlich haben Sie auch Dopplungen zwischen datastores über den service. Aber dies kann gewinnbringend sein, z.B. service B nicht brauchen, um verwenden Sie das gleiche schema, oder Daten speichern-Mechanismus als service A. Es speichert nur die relevanten Informationen in einer Weise, die am besten für diesen Dienst.
InformationsquelleAutor der Antwort Kaj
Haben Sie sich http://stytex.de/blog/2016/03/25/jhipster3-microservice-tutorial/ Teil 2: inter-service-Kommunikation Abschnitt. Es führt Sie durch ein konkretes Beispiel, wie es erreicht wird
InformationsquelleAutor der Antwort jvence
Lassen Sie mich versuchen, und fügen Sie einige weitere details zu diesem Szenario zu stress, was kann oder kann nicht die Voraussetzungen für eine Veranstaltung im Rahmen von Produkt-und Biiling. Die Abrechnung-MS würde sprechen müssen, um Produkt-Ms nur im Falle einer Bestellung. Eine Bestellung würde sich vor allem für einen separaten MS-sagen wir mal Um-FRAU, Wenn eine Bestellung erstellt wird oder platziert, es enthält Informationen von Produkten, die als Einzelposten.
Erstellung einer Bestellung kann betrachtet werden als ein Ereignis. Wenn die Ordnung der Schöpfung Ereignis Eintritt, kann es gedrückt werden, um eine Warteschlange für den Billing-service. Warteschlange implementiert werden sollte als Work-queue RabbitMQ. Auf diese Weise, mehrere Instanzen des Billing-MS können sich in die gleiche Warteschlange, aber es wird verarbeitet, durch ein und nur ein Arbeiter. Es gibt keine Rolle der BAND in der Registrierung eines Dienstes als Arbeitnehmer zu RabbitMQ. Jede Instanz registriert eine Warteschlange und RabbitMQ entscheidet, RoundRobin, welche Instanz der Billing Service wird zum verarbeiten dieses Ereignisses.
Details von Produkten in eine Bestellung für die Abrechnung-Ms sollte ein Service-to-Service-Aufruf ein Lastenausgleich über die Multifunktionsleiste (wenn es das ist, was Sie verwenden). Erste Produkt-details ist nicht wirklich ein event, eine Bestellung ist, daher der Unterschied.
Auch, Gateway verwendet werden soll, setzen Sie das Edge-services. Für Dienst-zu-Dienst anrufen, es wäre nicht ideal, hop via Gateway-service.
InformationsquelleAutor der Antwort sg4j
Eine Möglichkeit ist das senden einer Anfrage an bill microservice mit es ist registrierter name auf der eureka-Registrierung.
InformationsquelleAutor der Antwort freemanpolys