34 Stimmen

Wozu dient der Java Message Service (JMS)?

Ich bin gerade dabei, JMS zu evaluieren, und ich verstehe nicht, wofür ich es verwenden könnte.

Gegenwärtig wäre dies meiner Meinung nach ein Usecase: Ich möchte eine SalesInvoice-PDF-Datei erstellen und sie drucken, wenn ein SalesOrder das Lager verlässt. Während der Liefertransaktion könnte ich also eine transaktionale Druckanforderung senden, die erst dann beginnt, wenn die SalesOrder-Transaktion erfolgreich abgeschlossen wurde.

Jetzt habe ich herausgefunden, dass die meisten JMS-Produkte eigenständige Server sind.

  • Warum sollte man einen eigenständigen Server für die Nachrichtenverarbeitung benötigen, im Gegensatz zu einer einfachen In-Process-Verarbeitung mit Quartz Scheduler?
  • Wie interagiert es mit meiner Anwendung?
  • Ist das nicht viel zu langsam?
  • Was sind Usecases, die Sie bereits erfolgreich umgesetzt haben?

48voto

Uri Punkte 86472

JMS ist ein erstaunlich nützliches System, aber nicht für jeden Zweck geeignet.

Es handelt sich im Wesentlichen um einen High-Level-Rahmen für die Übermittlung von Nachrichten zwischen Knoten, mit Optionen für Entdeckung, Robustheit usw.

Ein nützlicher Anwendungsfall ist, wenn ein Client und ein Server miteinander kommunizieren sollen, ohne dass der Client die Adresse des Servers kennt (z. B. wenn Sie mehr als einen Server haben). Der Client muss nur den Broker und den Namen der Warteschlange/des Themas kennen, und der Server kann ebenfalls eine Verbindung herstellen.

JMS sorgt auch für mehr Robustheit. Sie können es zum Beispiel so konfigurieren, dass Sie, wenn der Server ausfällt, während der Client Nachrichten sendet, oder umgekehrt, immer noch Nachrichten vom Client senden oder Nachrichten vom Server abfragen können. Wenn Sie jemals versucht haben, dies direkt mit Sockets zu implementieren - es ist ein Albtraum.

Das von Ihnen beschriebene Szenario klingt wie ein klassisches J2EE-Problem, warum verwenden Sie kein J2EE-Framework? JMS wird oft innerhalb von J2EE für die Kommunikation verwendet, aber Sie haben alle anderen Vorteile.

5voto

ewernli Punkte 37122

Wozu braucht man einen Standalone-Server? für die Nachrichtenverarbeitung, im Gegensatz zu z.B. einfache prozessinterne Verarbeitung mit Quartz Scheduler?

Die Stärke von JMS liegt in der Tatsache, dass Sie die Möglichkeit haben mehrere Produzenten und mehrere Konsumenten für dieselbe Warteschlange, und der JMS-Broker verwaltet die Last.

Wenn Sie mehrere Produzenten haben, aber ein einzelner Verbraucher Sie können auch andere Methoden verwenden, z. B. einen Quarz-Scheduler und eine Datenbanktabelle. Aber sobald Sie mehrere Verbraucher haben, wird das Sperrschema sehr schwer zu entwerfen; gehen Sie besser für bereits bewährte Messaging-Lösung. Sehen Sie sich diese anderen Antworten von mir für ein paar weitere Details an: Warum sollte man JMS für eine asynchrone Lösung wählen? y Erzeuger/Verbraucher-System mit Datenbank

Die anderen Punkte sind einfach zu vage, um beantwortet zu werden.

3voto

Don Branson Punkte 13410

Ich habe es bei einer Reihe von Projekten eingesetzt. Es kann bei der Skalierbarkeit, der Entkopplung von Diensten und der Hochverfügbarkeit helfen. Hier ist eine Beschreibung, wie ich es vor einigen Jahren bei einem Projekt eingesetzt habe:

http://coders-log.blogspot.com/2008/12/favorite-projects-series-installment-2.html

In der Beschreibung wird erläutert, welche Vorteile JMS für dieses spezielle Projekt mit sich bringt, aber auch andere Projekte werden aus verschiedenen Gründen Messaging-Systeme verwenden.

3voto

user207421 Punkte 297318

Von der Javadoc :

Die Java Message Service (JMS)-API bietet Java-Programmen eine einheitliche Methode zum Erstellen, Senden, Empfangen und Lesen von Nachrichten in einem Enterprise-Messaging-System.

Mit anderen Worten, und im Gegensatz zu jeder anderen Antwort hier, ist JMS nichts weiter als eine API, die wickelt Zugang zu Message Brokern von Drittanbietern über vom Anbieter implementierte "JMS-Provider". Diese Nachrichten-Broker wie z.B. IBM MQ und Dutzende andere, haben die in anderen Antworten erwähnten Eigenschaften wie Zuverlässigkeit, Asynchronität usw.. JMS selbst bietet genau nichts davon. Es ist für Message Brokers das, was JDBC für SQL-Datenbanken oder JNDI für LDAP-Server ist (neben anderen Dingen).

1voto

LB40 Punkte 11541

JMS ist ein Nachrichtenorientierte Middleware .

  • Warum sollte man einen Standalone-Server für die Nachrichtenverarbeitung benötigen, im Gegensatz zu einer einfachen In-Process-Verarbeitung mit Quartz Scheduler?

Das hängt davon ab, welche anderen Komponenten Sie möglicherweise haben. Das nehme ich an. Aber ich weiß nichts über Quarz

  • Wie interagiert es mit meiner Anwendung?

Sie senden Nachrichten an den Broker.

  • Ist das nicht viel zu langsam?

Mit was vergleichen?

  • Was sind Usecases, die Sie bereits erfolgreich umgesetzt haben?

Ich habe JMS verwendet, um einen SIP-Anwendungsserver zu implementieren, um zwischen den verschiedenen Komponenten zu kommunizieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X