wake-up-neo.com

Verwendung von JMS / Nachrichtenwarteschlangen in der realen Welt?

Ich habe gerade etwas über JMS und Apache ActiveMQ gelesen. Und haben Sie sich gefragt, wozu die Menschen in der realen Welt JMS oder ähnliche Message Queue-Technologien verwendet haben?

174
nos

JMS (ActiveMQ ist eine JMS-Broker-Implementierung) kann als Mechanismus zum Ermöglichen der asynchronen Anforderungsverarbeitung verwendet werden. Möglicherweise möchten Sie dies tun, weil die Ausführung der Anforderung viel Zeit in Anspruch nimmt oder weil mehrere Parteien an der tatsächlichen Anforderung interessiert sind. Ein weiterer Grund für die Verwendung ist, dass mehrere Clients (möglicherweise in verschiedenen Sprachen geschrieben) über JMS auf Informationen zugreifen können. ActiveMQ ist hier ein gutes Beispiel, da Sie das STOMP-Protokoll verwenden können, um den Zugriff von einem C #/Java/Ruby-Client aus zu ermöglichen.

Ein Beispiel aus der Praxis ist eine Webanwendung, mit der eine Bestellung für einen bestimmten Kunden aufgegeben wird. Wenn Sie diese Bestellung aufgeben (und in einer Datenbank speichern), möchten Sie möglicherweise eine Reihe zusätzlicher Aufgaben ausführen:

  • Speichern Sie die Bestellung in einem Backend-System eines Drittanbieters (z. B. SAP).
  • Senden Sie eine E-Mail an den Kunden, um ihn über die Bestellung zu informieren

Zu diesem Zweck würde Ihr Anwendungscode eine Nachricht in einer JMS-Warteschlange veröffentlichen, die eine Bestell-ID enthält. Ein Teil Ihrer Anwendung, der die Warteschlange abhört, kann auf das Ereignis reagieren, indem er die orderId aufnimmt, die Bestellung in der Datenbank nachschlägt und diese Bestellung dann bei einem anderen Drittanbietersystem aufgibt. Ein anderer Teil Ihrer Anwendung ist möglicherweise dafür verantwortlich, dass die Bestellnummer entgegengenommen und eine Bestätigungs-E-Mail an den Kunden gesendet wird.

181
Jon

Verwenden Sie sie ständig, um lang laufende Vorgänge asynchron zu verarbeiten. Ein Webbenutzer möchte nicht länger als 5 Sekunden auf die Verarbeitung einer Anfrage warten. Wenn Sie eine längere Laufzeit haben, müssen Sie die Anforderung an eine Warteschlange senden und sofort eine URL zurücksenden, die der Benutzer überprüfen kann, um festzustellen, wann der Auftrag abgeschlossen ist.

Publish/Subscribe ist eine weitere gute Technik, um Sender von vielen Empfängern zu entkoppeln. Es ist eine flexible Architektur, da Abonnenten nach Bedarf kommen und gehen können.

90
duffymo

Ich habe so viele erstaunliche Anwendungen für JMS gehabt:

  • Web-Chat-Kommunikation für den Kundenservice.

  • Debug-Protokollierung im Backend. Alle App-Server sendeten Debug-Meldungen auf verschiedenen Ebenen. Anschließend kann ein JMS-Client gestartet werden, um nach Debug-Meldungen zu suchen. Sicher, ich hätte etwas wie syslog verwenden können, aber das gab mir alle Arten von Möglichkeiten, die Ausgabe basierend auf Kontextinformationen zu filtern (z. B. nach Name des Anwendungsservers, API-Aufruf, Protokollebene, Benutzer-ID, Nachrichtentyp) , etc...). Ich habe auch die Ausgabe eingefärbt.

  • Debug-Protokollierung in Datei. Wie oben wurden nur bestimmte Teile unter Verwendung von Filtern herausgezogen und zur allgemeinen Protokollierung in einer Datei protokolliert.

  • Alarmierung. Wieder eine ähnliche Konfiguration wie bei der obigen Protokollierung, bei der nach bestimmten Fehlern gesucht und Personen auf verschiedene Weise alarmiert werden (E-Mail, SMS, IM, Growl-Popup ...).

  • Dynamische Konfiguration und Steuerung von Software-Clustern. Jeder App-Server sendet eine "Configure Me" -Nachricht und anschließend einen Konfigurationsdämon, der mit einer Nachricht antwortet, die alle Arten von Konfigurationsinformationen enthält. Wenn später alle App-Server ihre Konfigurationen auf einmal ändern mussten, konnte dies über den Konfigurationsdämon erfolgen.

  • Und die üblichen Transaktionen in der Warteschlange für verzögerte Aktivitäten wie Rechnungsstellung, Auftragsabwicklung, Bereitstellung, E-Mail-Generierung ...

Es ist überall dort großartig, wo Sie die asynchrone Zustellung von Nachrichten garantieren möchten.

73
mikesomeone

Distributed (a) Synchronous Computing.
Ein Beispiel aus der Praxis könnte ein anwendungsweites Benachrichtigungsframework sein, das im Verlauf der Anwendungsnutzung an verschiedenen Stellen E-Mails an die Beteiligten sendet. Die Anwendung würde also als Producer fungieren, indem sie ein Message -Objekt erstellt, es auf ein bestimmtes Queue legt und sich vorwärts bewegt.
Es würde eine Gruppe von Consumers geben, die den fraglichen Queue abonnieren und sich um den Umgang mit dem übermittelten Message kümmern würden. Beachten Sie, dass im Verlauf dieser Transaktion die Producers von der Logik des Umgangs mit einem bestimmten Message entkoppelt werden.
Messaging-Frameworks (ActiveMQ und ähnliche) fungieren als Backbone, um solche Message -Transaktionen durch Bereitstellung von MessageBrokers zu vereinfachen.

19
pugmarx

Ich habe es verwendet, um Intraday-Trades zwischen verschiedenen Fondsverwaltungssystemen zu senden. Wenn Sie mehr darüber erfahren möchten, was eine großartige Technologie für Nachrichten ist, kann ich das Buch " Enterprise Integration Patterns " uneingeschränkt empfehlen. Es gibt einige JMS-Beispiele für Dinge wie Anfordern/Antworten und Veröffentlichen/Abonnieren.

Messaging ist ein hervorragendes Tool für die Integration.

10
RichardOD

Wir verwenden es, um eine asynchrone Verarbeitung zu initiieren, die keine bestehende Transaktion unterbrechen oder in Konflikt bringen soll.

Nehmen wir zum Beispiel an, Sie haben ein teures und sehr wichtiges Stück Logik wie "Sachen kaufen". Ein wichtiger Teil von "Sachen kaufen" wäre "Stuff Store benachrichtigen". Wir machen den Benachrichtigungsaufruf asynchron, damit jede Logik/Verarbeitung, die am Benachrichtigungsaufruf beteiligt ist, Ressourcen mit der Geschäftslogik buy nicht blockiert oder konkurriert. Das Endergebnis, der Kauf ist abgeschlossen, der Benutzer ist zufrieden, wir erhalten unser Geld und da die Zustellung der Warteschlange garantiert ist, wird der Laden benachrichtigt, sobald er öffnet oder sobald ein neuer Artikel in der Warteschlange steht.

8
Kevin Williams

Ich habe es für mein akademisches Projekt verwendet, bei dem es sich um eine Online-Einzelhandels-Website ähnlich wie bei Amazon handelte. JMS wurde verwendet, um folgende Funktionen zu handhaben:

  1. Aktualisieren Sie die Position der Bestellungen der Kunden, wenn die Sendung von einem Ort zum anderen transportiert wird. Dies erfolgte durch kontinuierliches Senden von Nachrichten an die JMS-Warteschlange.
  2. Benachrichtigung bei ungewöhnlichen Ereignissen wie verspätetem Versand und anschließendem E-Mail-Versand an den Kunden.
  3. Wenn die Zustellung ihren Bestimmungsort erreicht hat, wird ein Zustellungsereignis gesendet.

Wir hatten mehrere Remoteclients implementiert, die mit dem Hauptserver verbunden waren. Wenn eine Verbindung verfügbar ist, greifen sie auf die Hauptdatenbank zu oder verwenden keine eigene Datenbank. Um die Datenkonsistenz zu gewährleisten, haben wir einen 2PC-Mechanismus implementiert. Dazu haben wir JMS zum Austauschen der Nachrichten zwischen diesen Systemen verwendet, d. H. Einer, der als Koordinator fungiert und den Prozess durch Senden einer Nachricht in der Warteschlange initiiert, und andere, die entsprechend reagieren, indem sie eine Nachricht in der Warteschlange erneut zurücksenden. Wie bereits erwähnt, ähnelte dies dem Pub/Sub-Modell.

8
qwerty

Ich habe gesehen, wie JMS in verschiedenen kommerziellen und akademischen Projekten eingesetzt wurde. JMS kann leicht in Ihr Bild einfließen, wenn Sie ein vollständig entkoppeltes verteiltes System haben möchten. Im Allgemeinen, wenn Sie Ihre Anfrage von einem Knoten senden müssen und jemand in Ihrem Netzwerk sich darum kümmert, ohne/mit dem Absender irgendwelche Informationen über den Empfänger zu geben.

In meinem Fall habe ich in meiner Diplomarbeit JMS bei der Entwicklung einer nachrichtenorientierten Middleware (MOM) verwendet, bei der bestimmte Arten objektorientierter Objekte auf einer Seite als Ihre Anforderung generiert und auf der anderen Seite als Ihre Antwort kompiliert und ausgeführt werden .

6
paradisonoir

Apache Camel in Verbindung mit ActiveMQ ist eine großartige Möglichkeit, Enterprise-Integrationsmuster zu erstellen

5
Rob Davies

Wir haben Nachrichten verwendet, um Online-Angebote zu generieren

4
bluegene

Wir verwenden JMS für die Kommunikation mit Systemen an einer Vielzahl von Remotestandorten über unzuverlässige Netzwerke. Die lose Kopplung in Kombination mit zuverlässigem Messaging ergibt eine stabile Systemlandschaft: Jede Nachricht wird gesendet, sobald es technisch möglich ist, größere Probleme im Netzwerk haben keinen Einfluss auf die gesamte Systemlandschaft ...

3
roundrobin