Nastavenia trvalého predplatného ActiveMQ Nastavením režimu PERSISTENTNÉHO doručovania pre vydavateľa môžete použiť trvalé predplatné pre odberateľov, čo zaručuje, že program Pub/Sub prijíma všetky publikované správy. Odbery správ sa delia na netrvalé a trvalé predplatné, pričom netrvalé odbery môžu prijímať správy zaslané téme len vtedy, keď je klient aktívny, teda keď je klient offline, správy zaslané téme počas tohto obdobia sa stratia a nikdy nebudú prijaté. Keď je klient offline, ActiveMQ uloží všetky správy odoslané subjektu podľa jeho ID a keď sa klient opäť pripojí k ActiveMQ, dostane všetky správy odoslané subjektu, keď je offline. Pretrvávajúce predplatné zvyšujú režijné náklady a majú v jednom trvalom predplatnom naraz len jedného aktívneho používateľa. Kroky na vytvorenie trvalého predplatného: 1. Nastaviť zákaznícke ID pre spojenie; 2. Špecifikovať názov predplatného pre tému predplatného; Vyššie uvedená kombinácia musí byť jedinečná. Kód implementuje trvalé predplatné
(1) Pri používaní fronty, teda pri frontovaní, je na správu len jeden spotrebiteľ, takže perzistencia je veľmi jednoduchá, stačí ju uložiť do databázy
。 Potom si ho môže ktorýkoľvek spotrebiteľ vyzdvihnúť a zlikvidovať. Nezáleží na tom, či ho spotrebiteľ na chvíľu vypne.
(2) Pri použití témy, teda pri odbere, môže mať každá správa viacerých spotrebiteľov, čo je problematickejšie.
Po prvé, za predpokladu, že spotrebitelia sú bežní spotrebitelia, ------------------------ Po spustení <1> activemq bol zverejnený News 1, ale žiaľ, žiadni spotrebitelia teraz nezačínajú, teda žiadni spotrebitelia sa neprihlásili na odber. Takže
, správy boli opustené.
<2> Používateľ 1 sa spustil, pripojil sa na activemq, prihlásil sa na odber a čakal na správu~~
ActiveMQ zverejní správu 2, OK, spotrebiteľ 1 ju prijíma a spracováva. Opustenie správy.
<3> Consumer 2 je tiež spustený, pripojený k activemq, prihlásený na odber a čaká na správu~~
ActiveMQ zverejňuje správu 3, OK, spotrebiteľ 1, spotrebiteľ 2 sú všetky prijaté a spracované. Opustenie správy.
<4> Spotrebiteľ 1 je vypnutý.
ActiveMQ zverejní správu 4, OK, spotrebiteľ 2 ju prijme a spracuje. Opustenie správy.
<5> Spotrebiteľ 1 začal znova.
ActiveMQ zverejňuje správy 5, OK, spotrebiteľ 1 a spotrebiteľ 2 ich všetky prijímajú a spracovávajú. Opustenie správy. ----------------------------- Na záver: ActiveMQ jednoducho posiela správy aktuálne spustenému spotrebiteľovi. Spotrebitelia, ktorí sa vypnú, zmeškajú veľa správ a už ich nebudú môcť prijímať.
Ak odoslaná správa obsahuje dôležité údaje o synchronizácii používateľa a prehliadne ich, používateľské dáta nie sú synchronizované.
Ako teda zabezpečiť, aby spotrebitelia dostávali zmeškané správy po reštarte?
Odpoveďou je trvalé predplatné. -----------------------------
Bežné predplatné, bez rozlišovania medzi spotrebiteľmi, ak je v podniku niekoľko hláv, pridajú pár parených bucht. Pri trvalých predplatných je potrebné zaznamenať meno spotrebiteľa. Zhang San povedal, že som Zhang San, mám dusené buchty, vrátim sa po ne. Li Si povedala: Som Li Si, sú tu pre mňa dusené buchty, vrátim sa po ne. activemq zapísal mená Zhang Sana a Li Siho.
Potom, keď rozdeľujete parené buchty, jedna hlava stále dáva dusenú žemľu. Po rozdelení, keď videl, že Zhang San nehovorí, znamenalo to, že tam nie je, tak mu nechaj jednu. Li Si prehovoril, takže nebolo dôvod zostať.
Zhang San sa vrátil, hľadal aktívne a pozrel sa, toto nie je Zhang San, rýchlo prines jeho parené buchty. Môže to byť jedna parená žemľa, alebo 100 dusených žemlí, záleží na tom, koľko dusených žemlí Zhang San rozdelil odvtedy, čo na chvíľu odišiel.
activemq rozlišuje spotrebiteľov podľa clientID a mena odberateľa. ----------------------------- Vytvorte spojenie connection = connectionFactory.createConnection(); connection.setClientID("bbb"); Pretrvávajúce predplatné vyžadujú toto nastavenie. connection.start();
Vytvorte reláciu Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
Vytvorte si cieľ Topic topic = session.createTopic("userSyncTopic"); Názov témy
MessageConsumer consumer = session.createConsumer(topic); Pravidelné predplatné MessageConsumer consumer = session.createDurableSubscriber(téma, "bbb"); Trvalé predplatné
Ďalším bodom je, že producent správy používa perzistentný režim pri odosielaní správ MessageProducer producer = ...; producer.setDeliveryMode(DeliveryMode.PERSISTENT); Ak nie, je to štandardne trvalé
(5) Ak sa použije rovnaké "clientID", považuje sa to za toho istého spotrebiteľa. Ak dva programy používajú rovnaké "clientID", len jeden sa môže pripojiť k activemq súčasne a druhé pripojenie nahlási chybu.
(6) Nastavenia activemq sú v conf/activemq.xml a predvolené správy sú uložené v data/kahadb, pričom správy sa nestratia pri reštarte activemq.
Môžete pristupovať http://localhost:8161/admin/index.jsp: zobraziť informácie o aktuálnych frontách, témach a trvalých odberateľoch, posielať správy a ďalšie.
Obsah môžete skopírovať v activemq-jdbc.xml a upraviť ho a správu uložiť do iných databáz. |