|
|
Publisert på 09.01.2017 11:12:10
|
|
|

ActiveMQ persistent abonnementsinnstillinger Ved å sette PERSISTENT leveringsmodus for utgiveren, kan du bruke persistente abonnementer for abonnenter, noe som garanterer at Pub/Sub-programmet mottar alle publiserte meldinger. Meldingsabonnementer deles inn i ikke-varige og varige abonnementer, og ikke-varige abonnementer kan kun motta meldinger sendt til et emne når klienten er aktiv, det vil si når klienten er offline, meldinger sendt til emnet i denne perioden vil gå tapt og aldri mottas. Når klienten er offline, lagrer ActiveMQ alle meldinger sendt til subjektet i henhold til sin ID, og når klienten kobler til ActiveMQ igjen, vil den motta alle meldingene sendt til subjektet når den er offline. Vedvarende abonnementer øker overhead og har kun én aktiv bruker i et vedvarende abonnement om gangen. Trinn for å etablere et vedvarende abonnement: 1. Sette opp en kunde-ID for tilkoblingen; 2. Spesifiser et abonnementsnavn for temaet for abonnementet; Kombinasjonen ovenfor må være unik. Kode implementerer vedvarende abonnementer
(1) Når man bruker kø, altså når man køer, er det bare én forbruker per melding, så persistens er veldig enkelt, bare lagre det i databasen
。 Deretter kan enhver forbruker plukke den opp og kvitte seg med den. Det spiller ingen rolle om en forbruker slår den av en stund.
(2) Når man bruker topic, altså ved abonnement, kan hver melding ha flere brukere, noe som er mer problematisk.
For det første, forutsatt at forbrukerne er vanlige forbrukere, ------------------------ Etter lanseringen av <1> activemq ble lansert, news 1 ble lansert, men dessverre starter det ingen forbrukere nå, det vil si at ingen forbrukere har abonnert. Så
, ble nyheten forlatt.
<2> Forbruker 1 startet, koblet til activemq, abonnerte og ventet på en melding~~
activmq legger ut melding 2, OK, forbruker 1 mottar, og behandler den. Melding forlatt.
<3> Consumer 2 er også lansert, koblet til activemq, abonnert, og venter på en melding~~
activemq publiserer melding 3, OK, forbruker 1, forbruker 2 blir alle mottatt og behandlet. Melding forlatt.
<4> Forbruker 1 er slått av.
activemq legger ut melding 4, OK, forbruker 2 mottar, og behandler den. Melding forlatt.
<5> Forbruker 1 startet på nytt.
actmq publiserer meldinger 5, OK, forbruker 1 og forbruker 2 mottar og behandler dem alle. Melding forlatt. ----------------------------- For å oppsummere: ActiveMQ sender ganske enkelt meldinger til den nåværende tilgjengelige forbrukeren. Forbrukere som slår av, vil gå glipp av mange meldinger og vil ikke kunne motta dem igjen.
Hvis meldingen som sendes er viktig brukersynkroniseringsdata og bommer på den, er brukerdataene ikke synkronisert.
Så, hvordan får du forbrukere til å motta tapte meldinger når de starter på nytt?
Svaret er et vedvarende abonnement. -----------------------------
Vanlige abonnementer, uten å skille mellom forbrukere, hvis det er noen få hoder i lokalet, kaster noen dampede boller. For vedvarende abonnementer må du registrere navnet på forbrukeren. Zhang San sa: Jeg er Zhang San, det er dampede boller til meg, jeg kommer tilbake for å hente dem. Li Si sa: Jeg er Li Si, det er dampede boller til meg, jeg kommer tilbake for å hente dem. activemq skrev ned navnene Zhang San og Li Si.
Når man deler dampede boller, gir ett hode fortsatt dampet bolle. Etter delingen, da han så at Zhang San ikke snakket, betydde det at han ikke var der, så la ham være der. Li Si snakket, så det var ikke nødvendig å bli.
Zhang San kom tilbake, lette etter activemq, og tok en titt, dette er ikke Zhang San, ta med de dampede bollene hans raskt. Det kan være én dampet bolle, eller det kan være 100 dampede boller, det avhenger av hvor mange dampede boller Zhang San har delt siden han dro en stund.
activemq skiller forbrukere etter klientID og abonnentnavn. ----------------------------- Skap en forbindelse connection = connectionFactory.createConnection(); connection.setClientID("bbb"); Vedvarende abonnementer krever at du setter dette. connection.start();
Lag en økt Sesjonsøkt = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
Lag en destinasjon Emneemne = session.createTopic("userSyncTopic"); Emnenavn
MessageConsumer-forbruker = session.createConsumer(topic); Ordinært abonnement MeldingForbruker, forbruker = session.createDurableSubscriber(topic,"bbb"); Vedvarende abonnementer
Et annet poeng er at produsenten av meldingen bruker persistent modus når meldinger sendes MessageProducer produsent = ...; producer.setDeliveryMode(DeliveryMode.PERSISTENT); Hvis ikke, er den vedvarende som standard
(5) Hvis samme "clientID" brukes, regnes det som samme forbruker. Hvis to programmer bruker samme "clientID", kan bare ett koble til activemq samtidig, og den andre tilkoblingen vil rapportere en feil.
(6) Innstillingene i activemq er i conf/activemq.xml, og standardmeldingene lagres i data/kahadb, og meldingene vil ikke gå tapt ved omstart av activemq.
Du kan få tilgang til http://localhost:8161/admin/index.jsp: se informasjon om nåværende køer, temaer og vedvarende abonnenter, sende meldinger og mer.
Du kan kopiere innholdet i activemq-jdbc.xml og endre det, og du kan lagre meldingen i andre databaser. |
Foregående:360-billett som kjøper femte generasjons VIP-kanal, sprekker, går raskt inn i VIP-køenNeste:. .Net-plattformen
|