ActiveMQ persistent abonnementsindstillinger Ved at sætte PERSISTENT leveringsmode for udgiveren kan du bruge persistente abonnementer til abonnenter, hvilket sikrer, at Pub/Sub-programmet modtager alle publicerede beskeder. Beskedabonnementer opdeles i ikke-varige og varige abonnementer, og ikke-varige abonnementer kan kun modtage beskeder sendt til et emne, når klienten er aktiv, det vil sige, når klienten er offline, vil beskeder sendt til emnet i denne periode gå tabt og aldrig modtages. Når klienten er offline, gemmer ActiveMQ alle beskeder sendt til subjektet i henhold til dens ID, og når klienten igen forbinder til ActiveMQ, vil den modtage alle beskeder sendt til subjektet, når den er offline. Vedvarende abonnementer øger overhead og har kun én aktiv bruger i et vedvarende abonnement ad gangen. Trin til at etablere et vedvarende abonnement: 1. Opret et kunde-ID for forbindelsen; 2. Angiv et abonnementsnavn for emnet for abonnementet; Ovenstående kombination skal være unik. Kode implementerer vedvarende abonnementer
(1) Når man bruger kø, altså ved kø, er der kun én forbruger pr. besked, så persistens er meget simpel, bare gem det i databasen
。 Derefter kan enhver forbruger hente den og bortskaffe den. Det er ligegyldigt, om en forbruger slukker den i et stykke tid.
(2) Når man bruger topic, altså ved abonnement, kan hver besked have flere forbrugere, hvilket er mere problematisk.
For det første, forudsat at forbrugerne er almindelige forbrugere, ------------------------ Efter lanceringen af <1> activemq blev lanceret, news 1 blev udgivet, men desværre starter ingen forbrugere nu, det vil sige, ingen forbrugere har abonneret. Så
, nyheden blev opgivet.
<2> Forbruger 1 startede, forbandt til activemq, abonnerede og ventede på en besked~~
activemq sender besked 2, OK, forbruger 1 modtager og behandler den. Beskedforladelse.
<3> Consumer 2 er også lanceret, forbundet til activemq, abonneret og venter på en besked~~
activemq offentliggør besked 3, OK, forbruger 1, forbruger 2 modtages og behandles. Beskedforladelse.
<4> Forbruger 1 er slået fra.
activemq poster besked 4, OK, forbruger 2 modtager og behandler den. Beskedforladelse.
<5> Forbruger 1 startede igen.
activemq offentliggør beskeder 5, OK, forbruger 1 og forbruger 2 modtager og behandler dem alle. Beskedforladelse. ----------------------------- For at opsummere: ActiveMQ sender blot beskeder til den nuværende forbruger. Forbrugere, der slukker, vil gå glip af mange beskeder og vil ikke kunne modtage dem igen.
Hvis den sendte besked er vigtig brugersynkroniseringsdata og misser den, er brugerdataene ikke synkroniseret.
Så hvordan får du forbrugerne til at modtage ubesvarede beskeder, når de genstarter?
Svaret er et vedvarende abonnement. -----------------------------
Almindelige abonnementer, uden at skelne mellem forbrugere, hvis der er et par hoveder i lokalet, kaster et par dampede boller. For vedvarende abonnementer skal du registrere forbrugerens navn. Zhang San sagde: Jeg er Zhang San, der er dampede boller til mig, jeg kommer tilbage og henter dem. Li Si sagde, jeg er Li Si, der er dampede boller til mig, jeg kommer tilbage og henter dem. activemq skrev navnene Zhang San og Li Si ned.
Når man så deler dampede boller, giver det ene hoved stadig en dampet bolle. Efter delingen, da han så, at Zhang San ikke talte, betød det, at han ikke var der, så lad ham være en. Li Si talte, så der var ingen grund til at blive.
Zhang San kom tilbage, ledte efter activemq og kiggede, det her er ikke Zhang San, hent hans dampede boller hurtigt. Det kan være én dampet bolle, eller det kan være 100 dampede boller, det afhænger af, hvor mange dampede boller Zhang San har delt siden han forlod i et stykke tid.
activemq skelner forbrugere efter klientID og abonnentnavn. ----------------------------- Skab en forbindelse forbindelse = forbindelseFabrik.skabeForbindelse(); connection.setClientID("bbb"); Vedvarende abonnementer kræver, at du sætter dette. connection.start();
Opret en session Sessionssession = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
Skab en destination Emneemne = session.createTopic("userSyncTopic"); Emnenavn
MessageConsumer consumer = session.createConsumer(topic); Almindeligt abonnement MessageConsumer forbruger = session.createDurableSubscriber(topic,"bbb"); Vedvarende abonnementer
Et andet punkt er, at producenten af beskeden bruger persistent tilstand, når han sender beskeder MessageProducer producer = ...; producer.setDeliveryMode(DeliveryMode.PERSISTENT); Hvis ikke, er den som standard vedvarende
(5) Hvis det samme "clientID" bruges, betragtes det som den samme forbruger. Hvis to programmer bruger det samme "clientID", kan kun ét forbinde til activemq på samme tid, og den anden forbindelse vil rapportere en fejl.
(6) Indstillingerne i activemq er i conf/activemq.xml, og standardbeskederne gemmes i data/kahadb, og beskederne går ikke tabt ved genstart af activemq.
Du kan få adgang til http://localhost:8161/admin/index.jsp: se information om aktuelle køer, emner og vedvarende abonnenter, sende beskeder og mere.
Du kan kopiere indholdet i activemq-jdbc.xml og ændre det, og du kan gemme beskeden i andre databaser. |