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, ActiveMQ
die das Databases
nicht hat?
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, ActiveMQ
die das Databases
nicht hat?
Antworten:
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 DELETE
die Nachricht erhalten. Dies bedeutet eine Zeile INSERT
und DELETE
fü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 ActiveMQ
auf 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.
ActiveMQ
oder 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.
JMS
Die 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
, STOMP
und MQTT
, JMS
, EIP
zusammen 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.
ActiveMQ
bietet 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.
Scheduled Jobs
für die gleichen Zwecke verwendet.
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 UPDATE
Anweisung in einem RDBMS im Vergleich zu acknowledge
in activmeq eine sehr langsame Operation ist .
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.
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
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.
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.