ActiveMQ:n pysyvät tilausasetukset Asettamalla julkaisijalle PERSISTENT delivery -tilan voit käyttää pysyviä tilauksia tilaajille, mikä takaa, että Pub/Sub-ohjelma vastaanottaa kaikki julkaistut viestit. Viestitilaukset jaetaan ei-kestäviin ja kestäviin tilauksiin, ja ei-kestävät tilaukset voivat vastaanottaa aiheeseen lähetetyt viestit vain silloin, kun asiakas on aktiivinen, eli kun asiakas on offline-tilassa, aiheeseen lähetetyt viestit katoavat eivätkä koskaan vastaanoteta. Kun asiakas on offline-tilassa, ActiveMQ tallentaa kaikki kohteelle lähetetyt viestit ID:nsä mukaan, ja kun asiakas yhdistää ActiveMQ:hun uudelleen, se saa kaikki viestit, jotka lähetetään kohteelle, kun se on offline-tilassa. Pysyvät tilaukset lisäävät ylikuormitusta ja niillä on kerrallaan vain yksi aktiivinen käyttäjä pysyvässä tilauksessa. Vaiheet pysyvän tilauksen perustamiseksi: 1. Luo asiakastunnus yhteydelle; 2. Määritä tilausnimi tilauksen aiheelle; Yllä olevan yhdistelmän täytyy olla ainutlaatuinen. Koodi toteuttaa pysyvät tilaukset
(1) Jonossa eli jonossa on vain yksi käyttäjä per viesti, joten pysyvyys on hyvin yksinkertaista, tallenna se tietokantaan
。 Sitten kuka tahansa kuluttaja voi noutaa sen ja hävittää sen. Ei ole väliä, vaikka kuluttaja sammuttaisi sen hetkeksi.
(2) Kun käytetään aihetta, eli tilaattaessa, jokaisella viestillä voi olla useita käyttäjiä, mikä on hankalampaa.
Ensinnäkin, olettaen, että kuluttajat ovat tavallisia kuluttajia, ------------------------ <1:n lanseerauksen jälkeen> activemq julkaistiin, uutiset 1 julkaistiin, mutta valitettavasti kuluttajia ei nyt aloita, eli kukaan ei ole tilannut. Joten
, uutinen hylättiin.
<2> Kuluttaja 1 käynnistyi, yhdisti activemq:hon, tilasi ja odotti viestiä~~
activemq julkaisee viestin 2, OK, kuluttaja 1 vastaanottaa ja käsittelee sen. Viestin hylkääminen.
<3> Consumer 2 on myös julkaistu, yhdistetty activemq:hon, tilattu ja odottaa viestiä~~
activemq julkaisee viestit 3, OK, kuluttaja 1 ja kuluttaja 2 kaikki vastaanotetaan ja käsitellään. Viestin hylkääminen.
<4> Kuluttaja 1 on pois päältä.
activemq lähettää viestin 4, OK, kuluttaja 2 vastaanottaa ja käsittelee sen. Viestin hylkääminen.
<5> Kuluttaja 1 aloitti uudelleen.
activemq julkaisee viestit 5, OK, kuluttaja 1 ja kuluttaja 2, jotka kaikki vastaanottavat ja käsittelevät ne. Viestin hylkääminen. ----------------------------- Yhteenvetona: ActiveMQ lähettää yksinkertaisesti viestejä tällä hetkellä julkaistulle kuluttajalle. Kuluttajat, jotka sulkevat pois päältä, missaavat paljon viestejä eivätkä pysty vastaanottamaan niitä uudelleen.
Jos lähetetty viesti on tärkeä käyttäjän synkronointidata ja se jää huomaamatta, käyttäjätiedot eivät synkronisoida.
Miten siis saat kuluttajat saamaan vastaamattomia viestejä, kun he aloittavat uudelleen?
Vastaus on pysyvä tilaus. -----------------------------
Tavalliset tilaukset, ilman erottelua kuluttajien välillä, jos paikalla on muutama päät, heittävät muutaman höyrytetyn sämpylän. Pysyviä tilauksia varten sinun täytyy kirjata kuluttajan nimi. Zhang San sanoi: Minä olen Zhang San, minulle on höyrytettyjä sämpylöitä, tulen hakemaan ne. Li Si sanoi: Minä olen Li Si, minulle on höyrytettyjä sämpylöitä, tulen hakemaan ne. activemq kirjoitti ylös Zhang Sanin ja Li Sin nimet.
Sitten, kun höyrytetyt sämpylät jaetaan, toinen päät antaa silti höyrytetyn sämpylän. Jaon jälkeen, kun hän näki, ettei Zhang San puhunut, se tarkoitti, ettei hän ollut paikalla, joten jätä hänelle yksi. Li Si puhui, joten ei ollut tarvetta jäädä.
Zhang San palasi, etsi aktiivisen mq:n ja katsoi, tämä ei ole Zhang San, tuo höyrytetyt sämpylänsä nopeasti. Se voi olla yksi höyrytetty sämpylä tai 100 höyrytettyä sämpylää, se riippuu siitä, kuinka monta höyrytettyä sämpylää Zhang San on jakanut sen jälkeen, kun hän on lähtenyt hetkeksi.
activemq erottaa kuluttajat asiakastunnuksen ja tilaajan nimen perusteella. ----------------------------- Luo yhteys connection = connectionFactory.createConnection(); connection.setClientID("bbb"); Pysyvät tilaukset vaativat tämän asettamisen. connection.start();
Luo sessio Istuntoistunto = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
Luo kohde Topic topic = session.createTopic("userSyncTopic"); Aiheen nimi
MessageConsumer = session.createConsumer(topic); Tavallinen tilaus MessageConsumer = session.createDurableSubscriber(topic,"bbb"); Pysyvät tilaukset
Toinen seikka on, että viestin tuottaja käyttää pysyvää tilaa lähettäessään viestejä MessageProducer producer = ...; producer.setDeliveryMode(DeliveryMode.PERSISTENT); Jos ei, se on oletuksena pysyvä
(5) Jos samaa "clientID:tä" käytetään, sitä pidetään samana kuluttajana. Jos kaksi ohjelmaa käyttää samaa "clientID:tä", vain toinen voi yhdistää activemq:hun samanaikaisesti, ja toinen yhteys raportoi virheen.
(6) activemq:n asetukset ovat conf/activemq.xml-tilassa, ja oletusviestit tallennetaan data/kahadb-tiedostoihin, eikä viestit katoa activemq:n uudelleenkäynnistyksen yhteydessä.
Voit käyttää http://localhost:8161/admin/index.jsp: tarkastella tietoa ajankohtaisista jonoista, aiheista ja pysyvistä tilaajista, lähettää viestejä ja muuta.
Voit kopioida sisällön activemq-jdbc.xml ja muokata sitä, ja voit tallentaa viestin muihin tietokantoihin. |