Wofür wird ActiveMQ verwendet? Können wir das Messaging-Konzept mithilfe einer Datenbank anwenden?

116

Ich habe es nachgeschlagen und es hat Nachrichten zwischen 2 Systemen gesendet.
Aber wieso? Warum benutzt du nicht einfach eine Database?
Es muss eine Funktion geben, ActiveMQdie das Databasesnicht hat?

ahmednabil88
quelle
Ähnliche Frage stackoverflow.com/q/2868800/460775
EMBarbosa

Antworten:

178

Es wird verwendet, um zuverlässig zwischen zwei verteilten Prozessen zu kommunizieren.

Ja, Sie könnten Nachrichten in einer Datenbank speichern , um zwischen zwei Prozessen zu kommunizieren. Sobald die Nachricht empfangen wird, müssen Sie DELETEdie Nachricht erhalten. Dies bedeutet eine Zeile INSERTund DELETEfür jede Nachricht.
Wenn Sie versuchen , die Kommunikation von Tausenden von Nachrichten pro Sekunde zu skalieren , fallen Datenbanken in der Regel um .

Nachrichtenorientierte Middleware [MOM] wie ActiveMQauf der anderen Seite wurde entwickelt, um diese Anwendungsfälle zu behandeln.
Sie gehen davon aus, dass Nachrichten in einem fehlerfreien System sehr schnell gelöscht werden und Optimierungen vornehmen können, um den Overhead zu vermeiden .

Es kann auch Nachrichten an Verbraucher senden, anstatt dass ein Verbraucher die neue Nachricht durch Ausführen einer SQL-Abfrage abfragen muss.
Dies reduziert die Latenz bei der Verarbeitung neuer Nachrichten, die an das System gesendet werden, weiter.

Hiram Chirino
quelle
Schöne Erklärung! Müssen die beiden verteilten Prozesse vom selben Prozess sein? Ich meine zwei Instanzen derselben Anwendung?
Maverick
Nein, beliebige Anwendungen können über ActiveMQ miteinander kommunizieren. Beispielsweise könnten die Anwendungen A und B die Fragen AB und BA erstellen (lesen Sie: Nachrichten für A von B und umgekehrt) und Nachrichten für einander an die entsprechende Warteschlange senden.
Alex
Können Sie bitte einen Blick auf stackoverflow.com/questions/48579060/… werfen ?
gstackoverflow
67

ActiveMQoder im Allgemeinen sind alle MOM-Implementierungen (Message Oriented Middleware) zum Senden von Nachrichten zwischen zwei Anwendungen oder zwei Komponenten innerhalb einer Anwendung konzipiert.

Im Wesentlichen haben MOM und Datenbanken eine gemeinsame Grundlage, da sie einen transaktionalen und dauerhaften Datenspeicher bieten, aus dem gelesen und geschrieben werden kann.
Der große Unterschied ist das Verwendungsmuster - wo Datenbanken sehr allgemein und für die komplexe Suche über mehrere Tabellen optimiert sind, ist MOM für das Lesen von Nachrichten nacheinander in einer FIFO-ähnlichen Weise [Warteschlange] optimiert.

JMSDie API, die ActiveMQ implementiert, ist ein wichtiger Eckpfeiler in Java Enterprise-Anwendungen. Dadurch haben Nachrichten ein gemeinsames Format und eine gemeinsame Semantik, was die Integration zwischen verschiedenen Anwendungen erleichtert.

Natürlich gibt es eine Menge von mehr detaillierten Funktionen , die nur in ActiveMQ sind, Draht - Protokolle wie OpenWire, STOMPund MQTT, JMS, EIPzusammen mit Apache Camel, Nachrichtenmustern wie „Request / Reply“ und „Publish / Subscribe“, JMS Bridging, Clustering (“ Netzwerk von Brokern "), die Skalierung und Verteilung ermöglichen usw.
Sie sollten sich bei Interesse ein wenig über diese Themen informieren, da sie ziemlich groß sind.

Petter Nordlander
quelle
25

ActiveMQbietet hervorragende Scheduler- Unterstützung, dh Sie können das Senden Ihrer Nachricht so planen, dass sie zu einem bestimmten Zeitpunkt zugestellt wird .

Wir haben diese Funktion verwendet, um Medikamentenerinnerungen an Patienten zu senden, die ihre Medikamentendetails in einem Gesundheitsszenario hochladen.

Shoab Alam
quelle
3
Das ist ziemlich toll. Wir haben die Quartz-Planungsbibliothek für ähnliche Erinnerungszwecke verwendet.
Siddhartha
Wir haben die Oracle-Datenbank Scheduled Jobsfür die gleichen Zwecke verwendet.
ahmednabil88
15

Wenn Sie mit RDBMS eine Datenzeile verarbeiten, aktualisieren Sie normalerweise ein Flag, das angibt, dass die Zeile verarbeitet wurde, damit die Verarbeitung nicht wiederholt wird.

Bei der Nachrichtenwarteschlange müssen Sie jedoch nur eine Nachricht bestätigen, und der nächste Verbraucher verarbeitet die nächste.

Der Unterschied besteht darin, dass die UPDATEAnweisung in einem RDBMS im Vergleich zu acknowledgein activmeq eine sehr langsame Operation ist .

user3462208
quelle
8

Ich möchte Folgendes hervorheben:

Entkoppelt : Die Systeme können kommunizieren, ohne verbunden zu sein. Die Warteschlange liegt zwischen den Systemen. Ein Systemfehler wirkt sich niemals auf den anderen aus, da die Kommunikation über die Warteschlange erfolgt. Die Systeme arbeiten weiter, wenn sie in Betrieb sind.

Wiederherstellungsunterstützung : Die Nachrichten in den Warteschlangen selbst blieben bestehen. Die Nachrichten können später wiederhergestellt werden, wenn die Warteschlange fehlschlägt.

Zuverlässige Kommunikation : Stellen Sie sich ein System vor, das Clientanforderungen verarbeitet. Im Normalfall empfängt das System 100 Anfragen pro Minute. Dieses System ist unzuverlässig, wenn die Anzahl der Anfragen über dem Durchschnitt liegt. In diesem Fall kann die Warteschlange Anforderungen verwalten und Nachrichten basierend auf dem Systemdurchsatz regelmäßig senden, ohne sie zu beschädigen.

Asynchron : Die Client-Server-Kommunikation ist nicht blockierend. Sobald der Client eine Anfrage an den Server gesendet hat, kann er andere Vorgänge ausführen, ohne auf eine Antwort zu warten. Wenn der Client eine Antwort erhalten hat, kann er diese jederzeit bearbeiten.

Vino
quelle
7

Aus Wikipedia

Apache ActiveMQ ist ein Open Source-Nachrichtenbroker, der in Java zusammen mit einem vollständigen JMS-Client (Java Message Service) geschrieben wurde. Es bietet "Unternehmensfunktionen", was in diesem Fall bedeutet, die Kommunikation von mehr als einem Client oder Server zu fördern

In Bezug auf Ihre Fragen:

Warum würden Sie keine Datenbank verwenden?

Sie sollten die Datenbank für persistente Daten und nicht für temporäre Daten verwenden. Angenommen, Sie müssen eine Nachricht vom Absender an den Empfänger senden. Beim Empfang der Nachricht führt der Empfänger eine Operation aus (Empfangen, Verarbeiten und Vergessen). Nach der Verarbeitung dieser Nachricht benötigen Sie diese Nachricht überhaupt nicht. In diesem Fall ist das Speichern der Nachricht in einer persistenten Datenbank keine richtige Lösung.

Ich stimme der Antwort von @Hiram Chirino in Bezug auf das Einfügen und Löschen von Nachrichten in die Datenbank voll und ganz zu, wenn Sie die Datenbank anstelle des Nachrichtensystems verwenden.

Vorteile aus diesem Artikel und diesem Artikel

  1. Unternehmensintegration : Ermöglichen, dass Anwendungen, die mit verschiedenen Sprachen und auf verschiedenen Betriebssystemen erstellt wurden, miteinander integriert werden
  2. Standorttransparenz : Clientanwendungen müssen nicht wissen, wo sich die Dienstanwendungen befinden
  3. Zuverlässige Kommunikation - Die Produzenten / Konsumenten von Nachrichten müssen nicht gleichzeitig verfügbar sein
  4. Skalierung - Kann durch Hinzufügen weiterer Dienste horizontal skaliert werden
  5. Asynchrone Kommunikation - Ein Client kann eine Nachricht auslösen und die andere Verarbeitung fortsetzen, anstatt zu blockieren, bis der Dienst eine Antwort gesendet hat.
  6. Reduzierte Kopplung - Die von den Kunden und Dienstleistungen getroffenen Annahmen werden aufgrund der vorherigen 5 Vorteile erheblich reduziert. Ein Dienst kann Details über sich selbst ändern, einschließlich Standort, Protokoll und Verfügbarkeit, ohne den Client zu beeinträchtigen oder zu stören.

Es muss eine Funktion geben, die ActiveMQ für Datenbanken nicht hat.

Es gibt viele. Weitere Informationen finden Sie auf der Dokumentationsseite . Schauen Sie sich Anwendungsfälle an .

Schauen Sie sich diese Präsentation an, um die Interna von ActiveMQ zu verstehen.

Ravindra Babu
quelle
2

Angenommen, Sie haben eine Anwendung, die gleichzeitig an mehreren Standorten verwendet wird. Angenommen, Ihre Anwendung muss Tausende von Anforderungen pro Minute oder ähnliches verarbeiten, damit normale Datenbankoperationen solche Vorgänge nicht verarbeiten können. Activemq fungiert als Nachrichtenverarbeitung, bei der alle Nachrichten in die Warteschlange gestellt werden. Selbst wenn eine Ihrer Anwendungen an einem Ort abstürzt Der andere Standort ist nicht betroffen.

Shubham
quelle