|
|
Postitatud 09.01.2017 11:12:10
|
|
|

ActiveMQ püsiva tellimuse seaded Määrates kirjastajale PERSISTENT delivery režiimi, saad kasutada püsivaid tellimusi tellijatele, mis tagab, et Pub/Sub programm saab kõik avaldatud sõnumid kätte. Sõnumitellimused jagunevad mittekestvateks ja püsivateks tellimusteks ning mittepüsivad tellimused saavad teemale saadetud sõnumeid vastu võtta ainult siis, kui klient on aktiivne, st kui klient on võrguühenduseta, siis selle perioodi jooksul teemale saadetud sõnumid kaovad ja neid ei jõua kunagi kätte. Kui klient on võrguühenduseta, salvestab ActiveMQ kõik subjektile saadetud sõnumid vastavalt oma ID-le, ja kui klient ühendub uuesti ActiveMQ-ga, saab ta kõik subjektile saadetud sõnumid, kui ta on võrguühenduseta. Püsivad tellimused suurendavad üldkulusid ja neil on korraga ainult üks aktiivne kasutaja püsivas tellimuses. Sammud püsiva tellimuse loomiseks: 1. Seadista kliendi ID ühenduse jaoks; 2. Määra tellimuse teema jaoks tellimuse nimi; Ülaltoodud kombinatsioon peab olema unikaalne. Kood rakendab püsivaid tellimusi
(1) Järjekorra kasutamisel, ehk järjekorras, on iga sõnumi kohta ainult üks tarbija, seega püsivus on väga lihtne, lihtsalt salvesta see andmebaasi
。 Seejärel saab iga tarbija selle üles korjata ja ära visata. Pole tähtis, kas tarbija lülitab selle mõneks ajaks välja.
(2) Teema kasutamisel, ehk tellimisel, võib igal sõnumil olla mitu kasutajat, mis on keerulisem.
Esiteks, eeldades, et tarbijad on tavalised tarbijad, ------------------------ Pärast <1 käivitamist> käivitati activemq, avaldati uudis 1, kuid kahjuks ei alusta praegu ühtegi tarbijat, st ükski tarbija pole tellinud. Nii et
, uudis jäeti maha.
<2> Tarbija 1 alustas, ühendas activemq-ga, tellis ja ootas sõnumit~~
activemq postitab sõnumi 2, okei, tarbija 1 võtab selle vastu ja töötleb. Sõnumi hüljamine.
<3> Consumer 2 on samuti käivitatud, ühendatud activemq-ga, tellitud ja ootab sõnumit~~
activemq avaldab sõnumi 3, OK, tarbija 1 ja tarbija 2 on kõik vastu võetud ja töödeldud. Sõnumi hüljamine.
<4> Tarbija 1 on välja lülitatud.
activemq postitab sõnumi 4, OK, tarbija 2 võtab selle vastu ja töötleb. Sõnumi hüljamine.
<5> Tarbija 1 alustas uuesti.
activemq avaldab sõnumeid 5, OK, tarbija 1 ja tarbija 2, kõik saavad ja töötlevad neid. Sõnumi hüljamine. ----------------------------- Kokkuvõtteks: ActiveMQ saadab lihtsalt sõnumeid praegu käivitatud tarbijale. Tarbijad, kes lülitavad end välja, jäävad paljudest sõnumitest ilma, kuid ei saa neid enam kätte.
Kui saadetud sõnum on oluline kasutaja sünkroonimise andmed, kuid see jääb vahele, siis kasutajaandmed ei ole sünkroniseeritud.
Kuidas siis panna tarbijad saama vastamata sõnumeid, kui nad taaskäivitavad?
Vastus on püsiv tellimus. -----------------------------
Tavalised tellimused, ilma tarbijaid eristamata, kui kohapeal on mõned pead, viskavad paar aurutatud saia. Püsivate tellimuste puhul tuleb salvestada tarbija nimi. Zhang San ütles: Mina olen Zhang San, mulle on aurutatud kuklid, tulen tagasi neid võtma. Li Si ütles: Mina olen Li Si, mulle on aurutatud saiakesed, ma tulen tagasi neid võtma. activemq kirjutas üles Zhang Sani ja Li Si nimed.
Aurutatud kukleid jagades annab üks pea ikkagi aurutatud saiakese. Pärast jagunemist, kui ta nägi, et Zhang San ei rääkinud, tähendas see, et teda polnud seal, nii et jäta talle üks. Li Si rääkis, nii et polnud vaja jääda.
Zhang San tuli tagasi, otsis aktiivset mq-d ja vaatas, see ei ole Zhang San, too kiiresti tema aurutatud saiakesed. See võib olla üks aurutatud saiakes, või 100 aurutatud saiakest, see sõltub, kui palju aurutatud kukleid Zhang San on pärast mõnda aega lahkumist jaganud.
activemq eristab tarbijaid kliendiID ja tellija nime järgi. ----------------------------- Loo side connection = connectionFactory.createConnection(); connection.setClientID("bbb"); Püsivad tellimused nõuavad selle seadistamist. connection.start();
Loo sessioon Sessiooni sessioon = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
Loo sihtkoht Teema teema = session.createTopic("userSyncTopic"); Teema nimi
MessageConsumer = session.createConsumer(teema); Tavaline tellimus MessageConsumer = session.createDurableSubscriber (teema,"bbb"); Püsivad tellimused
Teine punkt on see, et sõnumi tootja kasutab sõnumite saatmisel püsivat režiimi MessageProducer produtsent = ...; producer.setDeliveryMode(DeliveryMode.PERSISTENT); Kui mitte, siis on see vaikimisi püsiv
(5) Kui kasutatakse sama "clientID"-d, loetakse seda sama tarbijaks. Kui kaks programmi kasutavad sama "clientID-d", saab ainult üks samaaegselt ühendada activemq-ga ning teine ühendus annab veateate.
(6) Activemq seaded on conf/activemq.xml-s ning vaikimisi sõnumid salvestatakse data/kahadb-i ning sõnumid ei kao activemq taaskäivitamisel.
Saad ligi http://localhost:8161/admin/index.jsp: vaadata infot praeguste järjekordade, teemade ja püsivate tellijate kohta, saata sõnumeid ja palju muud.
Sa saad activemq-jdbc.xml sisu kopeerida ja seda muuta ning sõnumi salvestada teistesse andmebaasidesse. |
Eelmine:360 piletit haaras viienda põlvkonna VIP-kanal, mis murdus, kiiresti VIP-järjekorda sisenemineJärgmine:. .Net platvorm
|