ActiveMQ nuolatinės prenumeratos parametrai Nustatę leidėjo pristatymo režimą NUOLATINIS, galite naudoti nuolatines prenumeratorių prenumeratas, kurios garantuoja, kad Pub / Sub programa gaus visus paskelbtus pranešimus. Pranešimų prenumeratos skirstomos į ilgalaikes prenumeratas ir ilgalaikes prenumeratas, o neilgalaikės prenumeratos gali gauti pranešimus, siunčiamus į temą, tik tada, kai klientas yra aktyvus, tai yra, kai klientas yra neprisijungęs, pranešimai, išsiųsti į temą per šį laikotarpį, bus prarasti ir niekada negauti. Kai klientas neprisijungęs, "ActiveMQ" išsaugos visus pranešimus, išsiųstus subjektui pagal jo ID, o kai klientas vėl prisijungs prie "ActiveMQ", gaus visus pranešimus, išsiųstus temai, kai jis bus neprisijungęs. Nuolatinės prenumeratos padidina pridėtines išlaidas ir vienu metu turi tik vieną aktyvų naudotoją. Nuolatinės prenumeratos sukūrimo veiksmai: 1. Nustatykite ryšio kliento ID; 2. Nurodykite prenumeratos temos prenumeratos pavadinimą; Aukščiau pateiktas derinys turi būti unikalus. Kodas įgyvendina nuolatines prenumeratas
(1) Naudojant eilę, tai yra, eilėje, viename pranešime yra tik vienas vartotojas, todėl patvarumas yra labai paprastas, tiesiog išsaugokite jį duomenų bazėje
。 Tada bet kuris vartotojas gali jį pasiimti ir išmesti. Nesvarbu, ar vartotojas kurį laiką jį išjungia.
(2) Naudojant temą, tai yra, prenumeruojant, kiekvienas pranešimas gali turėti kelis vartotojus, o tai yra labiau varginantis.
Pirma, darant prielaidą, kad vartotojai yra paprasti vartotojai, ------------------------ Paleidus <1> activemq, buvo išleista 1 naujiena, bet, deja, dabar neprasideda nė vienas vartotojas, tai yra, nė vienas vartotojas neužsiprenumeravo. Taigi
, naujienos buvo atsisakyta.
<2> 1 vartotojas pradėjo, prisijungė prie activemq, užsiprenumeravo ir laukė pranešimo ~~
activemq skelbia pranešimą 2, gerai, vartotojas 1 gauna ir apdoroja jį. Pranešimo atsisakymas.
<3> Vartotojas 2 taip pat paleistas, prijungtas prie activemq, užsiprenumeruotas ir laukia pranešimo ~~
activemq skelbia pranešimą 3, Gerai, vartotojas 1, vartotojas 2 yra visi gauti ir apdoroti. Pranešimo atsisakymas.
<4> 1 vartotojas išjungtas.
activemq skelbia pranešimą 4, gerai, vartotojas 2 gauna ir apdoroja jį. Pranešimo atsisakymas.
<5> 1 vartotojas vėl pradėjo veikti.
activemq skelbia pranešimus 5, OK, vartotojas 1 ir vartotojas 2 visi juos gauna ir apdoroja. Pranešimo atsisakymas. ----------------------------- Apibendrinant: "ActiveMQ" tiesiog siunčia pranešimus šiuo metu paleistam vartotojui. Išjungę vartotojai praleis daug pranešimų ir nebegalės jų gauti.
Jei išsiųstas pranešimas yra svarbus vartotojo sinchronizavimo duomenys ir jo praleidžiama, vartotojo duomenys nesinchronizuojami.
Taigi, kaip priversti vartotojus gauti praleistus pranešimus, kai jie paleidžiami iš naujo?
Atsakymas yra nuolatinė prenumerata. -----------------------------
Įprastos prenumeratos, neišskiriant vartotojų, jei vietoje yra kelios galvos, išmeta keletą garintų bandelių. Jei norite nuolatinių prenumeratų, turite įrašyti vartotojo vardą. Zhang San pasakė: "Aš esu Zhang San, man yra garuose virtų bandelių, aš grįšiu jų pasiimti. Li Si pasakė: "Aš esu Li Si, man yra garuose virtų bandelių, aš grįšiu jų pasiimti. activemq užrašė Zhang San ir Li Si vardus.
Tada, dalijant garintas bandeles, viena galva vis tiek duoda garuose virtą bandelę. Po padalijimo, kai jis pamatė, kad Zhang San nekalbėjo, tai reiškė, kad jo nėra, todėl palikite jam vieną. Li Si kalbėjo, todėl nereikėjo pasilikti.
Zhang San grįžo, ieškojo activemq, ir pažvelgė, tai ne Zhang San, atnešti savo garuose bandelės greitai. Tai gali būti viena garuose virta bandelė arba 100 garintų bandelių, tai priklauso nuo to, kiek garuose virtų bandelių Zhang San pasidalijo nuo tada, kai kuriam laikui išvyko.
activemq išskiria vartotojus pagal kliento ID ir abonento vardą. ----------------------------- Ryšio kūrimas ryšys = connectionFactory.createConnection(); connection.setClientID("bbb"); Nuolatinėms prenumeratoms reikia tai nustatyti. connection.start();
Seanso kūrimas Seanso seansas = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
Kelionės tikslo kūrimas Temos tema = session.createTopic("userSyncTopic"); Temos pavadinimas
MessageConsumer consumer = session.createConsumer(tema); Reguliarus abonementas MessageConsumer consumer = session.createDurableSubscriber(tema,"bbb"); Nuolatinės prenumeratos
Kitas dalykas yra tas, kad pranešimo gamintojas siųsdamas pranešimus naudoja nuolatinį režimą MessageProducer prodiuseris = ...; producer.setDeliveryMode(DeliveryMode.PERSISTENT); Jei ne, pagal numatytuosius nustatymus jis yra nuolatinis
(5) Jei naudojamas tas pats "kliento ID", jis laikomas tuo pačiu vartotoju. Jei dvi programos naudoja tą patį "clientID", tik viena gali prisijungti prie activemq vienu metu, o antrasis ryšys praneš apie klaidą.
(6) Activemq nustatymai yra conf/activemq.xml, o numatytieji pranešimai išsaugomi data/kahadb, o pranešimai nebus prarasti iš naujo paleidus activemq.
Galite pasiekti http://localhost:8161/admin/index.jsp: peržiūrėti informaciją apie dabartines eiles, temas ir nuolatinius prenumeratorius, siųsti pranešimus ir kt.
Galite nukopijuoti activemq-jdbc.xml turinį ir jį modifikuoti, taip pat galite įrašyti pranešimą į kitas duomenų bazes. |