2016-05-02 24 views
0

Ich baue eine Microservice-Architektur und ich bin auf der Suche nach einer guten Möglichkeit, Ereignisse zu streamen.Was ist eine gute Event-Store/Stream-Middleware für Service-orientierte/Microservice-Architekturen

Derzeit habe ich einen Dienst, der ein Ereignis veröffentlicht, auf das drei andere Dienste in einer bestimmten Weise reagieren müssen, die Reaktion auf dieses Ereignis soll jedoch nur einmal erfolgen.

Im Moment verwende ich RabbitMQ und mein Dienst veröffentlicht drei Nachrichten in separaten Warteschlangen, und jeder abonnierende Dienst hört eine Warteschlange. Daher kann nur eine Dienstinstanz die Nachricht annehmen und darauf reagieren.

Allerdings mag ich diesen Ansatz nicht, denn wenn ich einen neuen Abonnenten hinzufügen möchte, muss ich eine neue Warteschlange für den Veröffentlichungsdienst hinzufügen.

Ich suche im Grunde nach einer Art Middleware für einen Ereignisstrom, der mehrere Dienste einem Ereignis zuhören lässt, aber sicherstellt, dass nur eine Instanz jedes Dienstes tatsächlich auf das Ereignis reagiert.

Ich habe noch nichts gefunden, also würde ich mich über Vorschläge freuen.

+0

Der Round Robin-Ansatz ist der Standard in Kaninchen mq. Viele Hörer in einer Warteschlange, aber nur ein Verbraucher. –

+0

Ja, aber ich brauche eine separate Warteschlange für jeden konsumierenden Dienst. So passiert etwas in Service A und Service B, C und D müssen alle auf dieses Ereignis reagieren. Wenn ich eine Warteschlange verwende, wird nur einer der Dienste reagieren, weil die Nachricht verbraucht wird. Wenn ich drei Nachrichten in derselben Warteschlange veröffentliche, besteht die Möglichkeit, dass zwei oder drei Instanzen eines Dienstes die Nachricht konsumieren, sodass die Reaktion immer noch ungenau ist. Also brauche ich drei separate Warteschlangen, eine für jeden Dienst. Wenn Service E ebenfalls auf das Ereignis hören muss, muss ich Service A ändern und isolierte Änderungen durchbrechen. – KaffeeKaethe

+0

(Forts.) Die Änderung, die ich vornehmen muss, ist das Veröffentlichen des Ereignisses in einer vierten Warteschlange, die von Service E konsumiert wird. – KaffeeKaethe

Antwort

1

Sie können einen Blick auf this page werfen, die erklärt, wie AMQP-Modell und damit RabbitMQ funktioniert.

Ihre Nachricht wird in einem Exchange nicht in der Warteschlange veröffentlicht. Die Vermittlungsstelle leitet die Nachricht gemäß dem Exchange-Typ und dem verknüpften Schlüssel und Routing-Schlüssel an die verknüpften Warteschlangen weiter.

Im Allgemeinen kümmern sich Verlage nicht um den Routing hinter einer Börse. Es ist das Anliegen der Konsumenten, eine Warteschlange zu erstellen und an die Börse zu binden, je nachdem, was sie verbrauchen wollen und wie.

So, wenn Ihr Produzent seine Nachrichten an die ExchangeA zum Beispiel unter Verwendung veröffentlicht ein direct exchange, Service A/B/C kann ihre Warteschlangen an diesen Austausch schaffen und binden und sie werden jedes die veröffentlichte Nachricht erhalten. Wenn ein neuer Dienst E erzeugt wird, sollte er auch eine Warteschlange für diesen Austausch erstellen und binden. Daher müssen Sie den Herausgeber nicht ändern.

+0

Vielen Dank, ich habe das While-Konzept wirklich falsch verstanden ... Jetzt ist es klar und ich denke, das ist genau das, was ich will. Nochmals vielen Dank. – KaffeeKaethe

+0

Danke, wenn es deine Frage beantwortet, bitte akzeptiere diese Antwort mit Upvote –