it-swarm.com.de

Microservices Warum RabbitMQ verwenden?

Ich habe noch keinen Beitrag gefunden, in dem ich gefragt wurde, aber ich entschuldige mich, wenn ich ihn verpasst habe.

Ich versuche, mich mit Microservices zu beschäftigen, und bin auf Artikel gestoßen, in denen RabbitMQ verwendet wird. Ich bin verwirrt, warum RabbitMQ benötigt wird. Ist die Absicht, dass die Dienste eine Web-API verwenden, um mit der Außenwelt zu kommunizieren, und RabbitMQ, um miteinander zu kommunizieren?

24
Elias

In der Microservices-Architektur haben Sie zwei Möglichkeiten, zwischen den Microservices zu kommunizieren:

  • Synchron - das heißt, jeder Dienst ruft direkt den anderen Mikrodienst auf, was zu einer Abhängigkeit zwischen den Diensten führt
  • Asynchron - Sie haben einen zentralen Hub (oder eine Nachrichtenwarteschlange), in dem Sie alle Anforderungen zwischen die Microservices stellen und der entsprechende Dienst die Anforderung entgegennimmt, verarbeitet und das Ergebnis an den Anrufer zurückgibt. Hierfür wird RabbitMQ (oder eine andere Nachrichtenwarteschlange - MSMQ und Apache Kafka sind gute Alternativen) verwendet. In diesem Fall wissen alle Microservices nur über die Existenz des Hubs Bescheid.

microservices.io hat einige sehr nette Artikel über die Verwendung von microservices

44
Dimitar Tsonev

Eine Nachrichtenwarteschlange bietet ein asynchrones Kommunikationsprotokoll - Sie haben die Möglichkeit, eine Nachricht von einem Dienst an einen anderen zu senden, ohne zu wissen, ob ein anderer Dienst diese sofort verarbeiten kann oder nicht. Nachrichten können warten, bis der zuständige Dienst bereit ist. Ein Dienst, der eine Nachricht veröffentlicht, muss nichts über die Funktionsweise der Dienste wissen, die diese Nachricht verarbeiten. Durch diese Art der Behandlung von Nachrichten wird der Produzent vom Konsumenten abgekoppelt .

Eine Nachrichtenwarteschlange hält die Prozesse in Ihrer Anwendung getrennt und unabhängig voneinander. Durch diese Art der Nachrichtenverarbeitung könnte ein System entstehen, das einfach zu warten und zu skalieren ist .

Hier ist eine Geschichte, die erklärt, wie Parkster (ein digitaler Parkdienst) sein System mithilfe von RabbitMQ in mehrere Mikrodienste aufteilt.

Diese Anleitung Folgen Sie einem Szenario, in dem eine Webanwendung Benutzern das Hochladen von Informationen auf eine Website ermöglicht. Die Site verarbeitet diese Informationen und generiert ein PDF und sendet es per E-Mail an den Benutzer zurück. Die Verarbeitung der Informationen, das Generieren des PDF und das Senden der E-Mail erfolgen in diesem Fall Ein Beispielfall dauert einige Sekunden. Dies ist einer der Gründe, warum eine Nachrichtenwarteschlange verwendet wird.

Hier ist eine Geschichte über wie und warum CloudAMQP verwendete Nachrichtenwarteschlangen und RabbitMQ zwischen Microservices.

hier ist eine Geschichte über die Verwendung von RabbitMQ in einer ereignisbasierten Microservices-Architektur, die monatlich 100 Millionen Benutzer unterstützt.

Und zum Schluss ein Link an Kontena, warum sie RabbitMQ für ihre Microservice-Architektur ausgewählt haben: "Weil wir eine stabile, verwaltbare und hochverfügbare Lösung für Messaging brauchten.".

Bitte beachten Sie, dass ich für die Firma hinter CloudAMQP arbeite.

26

Die gleiche Frage kann sein, warum REST für Microservices erforderlich ist. Das Microservice-Konzept ist unter Mond nichts Neues. Eine lange Verteilung des Workflows wurde für das Backend-Engineering und die asynchrone Anforderungsverarbeitung verwendet. Microservice ist dieselbe Komponente in einer separaten JVM, die mit S (Einzelverantwortung) in SOLID übereinstimmt. Was macht es micro SERVICE - ist, dass es ausgewogen ist. Und das ist alles! Insbesondere (!) Kann es sich um REST Service auf Spring Cloud/REST-Basis handeln, der von Eureka registriert wurde und über ein Proxy-Gateway und einen Lastenausgleich über Zuul und Ribbon verfügt. Aber es ist nicht die ganze Welt der Mikrodienste! Übrigens ist die asynchrone verteilte Verarbeitung eine der Aufgaben, für die Mikrodienste verwendet werden. Vor langer Zeit wurden Dienste (Komponenten) in getrennte JVM über beliebige Nachrichten integriert, und das Muster wird als ESB bezeichnet. Microservices sind die gleichen Themen des Musters. Aufgrund der Mode für Spring Cloud scheint REST die einzige Möglichkeit für Microservices zu sein. Nee! Nachrichtenbasierte asynchrone Microservice-Architektur wird beispielsweise von Vertx https://dzone.com/articles/asynchronous-microservices-with-vertx unterstützt. Warum nicht RabbitMQ als Nachrichtenkanal verwenden? In diesem Fall kann der Lastausgleich durch Erstellen eines RabbitMQ-Clusters bereitgestellt werden. Zum Beispiel: https://codeburst.io/using-rabbitmq-for-microservices-communication-on-docker-a43840401819 . Die Welt ist also viel weiter.

0
Simon