Trvalá nastavení předplatného ActiveMQ Nastavením režimu PERSISTENTNÍHO doručování pro vydavatele můžete použít trvalé předplatné pro předplatitele, což zaručuje, že program Pub/Sub přijme všechny publikované zprávy. Odběry zpráv se dělí na netrvalé a trvalé odběry, přičemž netrvalé odběry mohou přijímat zprávy odeslané tématu pouze tehdy, když je klient aktivní, tedy když je klient offline, zprávy odeslané tématu během tohoto období budou ztraceny a nikdy nepřijaty. Když je klient offline, ActiveMQ uloží všechny zprávy odeslané subjektu podle jeho ID a když se klient znovu připojí k ActiveMQ, obdrží všechny zprávy odeslané subjektu, když je offline. Trvalá předplatné zvyšuje režijní zátěž a má v jednom trvalém předplatném pouze jednoho aktivního uživatele najednou. Kroky k vytvoření trvalého předplatného: 1. Nastavte zákaznické ID pro připojení; 2. Specifikovat název předplatného pro téma předplatného; Výše uvedená kombinace musí být jedinečná. Kód implementuje trvalé předplatné
(1) Při použití fronty, tedy při frontě, je na jednu zprávu pouze jeden spotřebitel, takže perzistence je velmi jednoduchá, stačí ji uložit do databáze
。 Pak si ji může každý zákazník vyzvednout a zlikvidovat. Nezáleží na tom, jestli ho spotřebitel na chvíli vypne.
(2) Při použití tématu, tedy při odběru, může mít každá zpráva více uživatelů, což je problematickější.
Za prvé, za předpokladu, že spotřebitelé jsou běžní spotřebitelé, ------------------------ Po spuštění <1> activemq byla zveřejněna novinka 1, ale bohužel nyní žádní spotřebitelé nezačínají, tedy žádní spotřebitelé se nepřihlásili k odběru. Takže
, zprávy byly opuštěny.
<2> Spotřebitel 1 se spustil, připojil se k activemq, přihlásil se k odběru a čekal na zprávu~~
ActiveMQ zveřejní zprávu 2, OK, spotřebitel 1 ji přijme a zpracuje. Opuštění zprávy.
<3> Consumer 2 je také spuštěn, připojil se k activemq, přihlásil se k odběru a čeká na zprávu~~
ActiveMQ zveřejňuje zprávu 3, OK, spotřebitel 1, spotřebitel 2 jsou všechny přijaty a zpracovány. Opuštění zprávy.
<4> Spotřebitel 1 je vypnutý.
ActiveMQ zveřejní zprávu 4, OK, spotřebitel 2 ji přijme a zpracuje. Opuštění zprávy.
<5> Spotřebitel 1 začal znovu.
ActiveMQ zveřejňuje zprávy 5, OK, spotřebitel 1 a spotřebitel 2, které všechny přijímají a zpracovávají. Opuštění zprávy. ----------------------------- Shrnuto: ActiveMQ jednoduše odesílá zprávy aktuálně spuštěnému spotřebiteli. Spotřebitelé, kteří se odpojí, přijdou o mnoho zpráv a už je nebudou moci znovu přijímat.
Pokud je odeslaná zpráva důležitá pro synchronizaci uživatele a chybí ji, uživatelská data nejsou synchronizována.
Jak tedy přimět spotřebitele, aby při restartu dostávali zmeškané zprávy?
Odpovědí je trvalé předplatné. -----------------------------
Běžní předplatní, bez rozlišování mezi spotřebiteli, pokud je v klubu pár lidí, přidávají pár dušených bulek. U trvalých odběrů je potřeba zaznamenat jméno spotřebitele. Zhang San řekl: Jsem Zhang San, mám dušené housky, vrátím se pro ně. Li Si řekla: Jsem Li Si, mám dušené bulky, vrátím se pro ně. activemq zapsal jména Zhang Sana a Li Siho.
Pak, když se dělí dušené buchty, jedna hlava stále dává dušenou housku. Po rozdělení, když viděl, že Zhang San nemluví, znamenalo to, že tam není, tak mu nech jedno. Li Si promluvil, takže nebylo třeba zůstávat.
Zhang San se vrátil, hledal aktivní a podíval se, tohle není Zhang San, rychle přines jeho dušené housky. Může to být jedna dušená houska, nebo 100 dušených housek, záleží na tom, kolik dušených housek Zhang San rozdělil od doby, co na nějakou dobu odešel.
activemq rozlišuje spotřebitele podle clientID a jména odběratele. ----------------------------- Vytvořte spojení connection = connectionFactory.createConnection(); connection.setClientID("bbb"); Trvalé předplatné vyžaduje nastavit to. connection.start();
Vytvořte si sezení Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
Vytvořte cíl Topic = session.createTopic("userSyncTopic"); Název tématu
MessageConsumer consumer = session.createConsumer(topic); Pravidelné předplatné MessageConsumer consumer = session.createDurableSubscriber(topic,"bbb"); Trvalé předplatné
Dalším bodem je, že producent zprávy používá při odesílání zpráv perzistentní režim MessageProducer producer = ...; producer.setDeliveryMode(DeliveryMode.PERSISTENT); Pokud ne, je to ve výchozím nastavení persistentní
(5) Pokud je použito stejné "clientID", považuje se za stejného spotřebitele. Pokud dva programy používají stejné "clientID", může se současně připojit k activemq pouze jeden a druhé připojení hlásí chybu.
(6) Nastavení activemq jsou v conf/activemq.xml a výchozí zprávy jsou uloženy v data/kahadb, a zprávy se neztratí při restartu activemq.
Můžete přistupovat http://localhost:8161/admin/index.jsp: zobrazit informace o aktuálních frontách, tématech a trvalých odběratelích, posílat zprávy a další.
Obsah můžete zkopírovat v activemq-jdbc.xml a upravit ho, a zprávu uložit do jiných databází. |