Persistent-Abonnement-Einstellungen von ActiveMQ Indem Sie den PERSISTENT-Liefermodus für den Publisher einstellen, können Sie persistente Abonnements für Abonnenten verwenden, was garantiert, dass das Pub/Sub-Programm alle veröffentlichten Nachrichten empfängt. Nachrichtenabonnements werden in nicht-dauerhafte und dauerhafte Abonnements unterteilt, und nicht-dauerhafte Abonnements können nur Nachrichten empfangen, die an ein Thema gesendet werden, wenn der Client aktiv ist, also wenn der Client offline ist; Nachrichten, die während dieses Zeitraums an das Thema gesendet werden, gehen verloren und werden nie empfangen. Wenn der Client offline ist, speichert ActiveMQ alle an das Subjekt gesendete Nachrichten entsprechend seiner ID, und wenn der Client sich erneut mit ActiveMQ verbindet, erhält er alle Nachrichten, die an das Subjekt gesendet wurden, wenn es offline ist. Persistente Abonnements erhöhen den Overhead und haben jeweils nur einen aktiven Nutzer in einem persistenten Abonnement. Schritte zur Einrichtung eines persistenten Abonnements: 1. Eine Kunden-ID für die Verbindung einrichten; 2. Geben Sie für das Thema des Abonnements einen Abonnementnamen an; Die obige Kombination muss eindeutig sein. Code implementiert persistente Abonnements
(1) Beim Einsatz von Warteschlange, also beim Warteschlangen, gibt es nur einen Konsumenten pro Nachricht, daher ist die Persistenz sehr einfach, einfach in der Datenbank speichern
。 Dann kann jeder Verbraucher es aufnehmen und entsorgen. Es spielt keine Rolle, ob ein Verbraucher es für eine Weile ausschaltet.
(2) Bei der Verwendung von Topic, also beim Abonnement, kann jede Nachricht mehrere Konsumenten haben, was umständlicher ist.
Erstens, unter der Annahme, dass Verbraucher gewöhnliche Verbraucher sind, ------------------------ Nach dem Start von <1> activemq wurde News 1 veröffentlicht, aber leider starten derzeit keine Verbraucher, das heißt, keine Kunden haben ein Abonnement abgeschlossen. Also
Die Nachricht wurde verworfen.
<2> Consumer 1 startete, verband sich mit activemq, abonnierte und wartete auf eine Nachricht~~
activemq postet Nachricht 2, OK, Konsument 1 empfängt und verarbeitet sie. Nachricht verlassen.
<3> Consumer 2 ist ebenfalls gestartet, mit activemq verbunden, abonniert und wartet auf eine Nachricht~~
activemq veröffentlicht Nachricht 3, OK, Verbraucher 1, Verbraucher 2 werden alle empfangen und verarbeitet. Nachricht verlassen.
<4> Consumer 1 ist ausgeschaltet.
activemq postet Nachricht 4, OK, Konsument 2 empfängt sie und verarbeitet sie. Nachricht verlassen.
<5> Consumer 1 startete erneut.
activemq veröffentlicht Nachrichten 5, OK, Konsument 1 und Konsument 2 empfangen und verarbeiten sie alle. Nachricht verlassen. ----------------------------- Zusammenfassend: ActiveMQ sendet einfach Nachrichten an den aktuell gestarteten Verbraucher. Verbraucher, die abschalten, verpassen viele Nachrichten und können sie nicht mehr empfangen.
Wenn die gesendete Nachricht wichtige Benutzersynchronisationsdaten sind und sie verpassen, werden die Benutzerdaten nicht synchronisiert.
Wie bringt man also Verbraucher dazu, verpasste Nachrichten zu erhalten, wenn sie neu starten?
Die Antwort ist ein dauerhaftes Abo. -----------------------------
Normale Abonnements, ohne zwischen den Verbrauchern zu unterscheiden, werfen bei einigen Köpfen im Veranstaltungsort ein paar gedämpfte Brötchen. Für dauerhafte Abonnements müssen Sie den Namen des Kunden notieren. Zhang San sagte: Ich bin Zhang San, es gibt gedämpfte Brötchen für mich, ich komme zurück, um sie zu holen. Li Si sagte: Ich bin Li Si, es gibt gedämpfte Brötchen für mich, ich komme zurück, um sie zu holen. activemq schrieb die Namen von Zhang San und Li Si auf.
Dann gibt beim Teilen der gedämpften Brötchen ein Kopf noch ein gedämpftes Brötchen hervor. Nach der Teilung, als er sah, dass Zhang San nicht sprach, bedeutete das, dass er nicht da war, also lass ihn eine. Li Si sprach, also gab es keinen Grund zu bleiben.
Zhang San kam zurück, suchte nach activemq und schaute nach, das ist nicht Zhang San, bring schnell seine gedämpften Brötchen mit. Es kann ein gedämpftes Brötchen sein oder 100 gedämpfte Brötchen – es kommt darauf an, wie viele gedämpfte Brötchen Zhang San seit seiner Abreise geteilt hat.
activemq unterscheidet Konsumenten anhand von ClientID und Abonnentennamen. ----------------------------- Stellen Sie eine Verbindung her connection = connectionFactory.createConnection(); connection.setClientID("bbb"); Persistente Abonnements erfordern diese Einstellung. connection.start();
Eine Sitzung erstellen Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
Erstelle ein Ziel Thema = session.createTopic("userSyncTopic"); Themenname
MessageConsumer Consumer = session.createConsumer(topic); Reguläres Abonnement MessageConsumer-Nutzer = session.createDurableSubscriber(topic,"bbb"); Persistente Abonnements
Ein weiterer Punkt ist, dass der Erzeuger der Nachricht beim Senden von Nachrichten den persistenten Modus verwendet MessageProducer Produzent = ...; producer.setDeliveryMode(DeliveryMode.PERSISTENT); Wenn nicht, ist es standardmäßig persistent
(5) Wenn dieselbe "ClientID" verwendet wird, gilt sie als derselbe Konsument. Wenn zwei Programme dieselbe "ClientID" verwenden, kann nur eines gleichzeitig mit activemq verbunden werden, und die zweite Verbindung meldet einen Fehler.
(6) Die Einstellungen von activemq sind in conf/activemq.xml, und die Standardnachrichten werden in data/kahadb gespeichert, und die Nachrichten gehen beim Neustart von activemq nicht verloren.
Sie können auf http://localhost:8161/admin/index.jsp zugreifen: Informationen zu aktuellen Warteschlangen, Themen und dauerhaften Abonnenten anzeigen, Nachrichten senden und mehr.
Man kann den Inhalt im activemq-jdbc.xml kopieren und verändern, und die Nachricht in anderen Datenbanken speichern. |