Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 13505|Răspunde: 2

Setări persistente de abonament ActiveMQ

[Copiază linkul]
Postat pe 09.01.2017 11:12:10 | | |

Setări persistente de abonament ActiveMQ
Prin setarea modului de livrare PERSISTENT pentru editor, poți folosi abonamente persistente pentru abonați, ceea ce garantează că programul Pub/Sub primește toate mesajele publicate.
Abonamentele la mesaje sunt împărțite în abonamente nedurabile și abonamente durabile, iar abonamentele nedurabile pot primi mesaje trimise către un subiect doar când clientul este activ, adică când clientul este offline, mesajele trimise către subiect în această perioadă se vor pierde și nu vor fi niciodată primite. Când clientul este offline, ActiveMQ va salva toate mesajele trimise subiectului conform ID-ului său, iar când clientul se conectează din nou la ActiveMQ, va primi toate mesajele trimise subiectului când este offline. Abonamentele persistente cresc costurile suplimentare și au doar un singur utilizator activ într-un abonament persistent la un moment dat. Pași pentru a stabili un abonament persistent:
1. Configurarea unui ID de client pentru conexiune;
2. Specifică un nume de abonament pentru subiectul abonamentului;
Combinația de mai sus trebuie să fie unică.
Codul implementează abonamente persistente

(1) Când se folosește coada, adică la coadă, există un singur consumator per mesaj, deci persistența este foarte simplă, pur și simplu salvează în baza de date

。 Apoi, orice consumator îl poate ridica și arunca de el. Nu contează dacă un consumator o oprește pentru o perioadă.

(2) Când se folosește topic, adică la abonament, fiecare mesaj poate avea mai mulți consumatori, ceea ce este mai problematic.

În primul rând, presupunând că consumatorii sunt consumatori obișnuiți,
------------------------
După lansarea <1> activemq, a fost lansat News 1, dar, din păcate, niciun consumator nu începe acum, adică niciun consumator nu s-a abonat. Deci

, știrile au fost abandonate.

<2> Consumatorul 1 a pornit, s-a conectat la activemq, s-a abonat și a așteptat un mesaj~~

activemq postează mesajul 2, OK, consumatorul 1 îl primește și îl procesează. Abandon al mesajului.

<3> Consumer 2 este de asemenea lansat, conectat la activemq, abonat și așteaptă un mesaj~~

activemq publică mesajul 3, OK, consumator 1, consumator 2 sunt toate primite și procesate. Abandon al mesajului.

<4> Consumatorul 1 este dezactivat.

activemq postează mesajul 4, OK, consumatorul 2 îl primește și îl procesează. Abandon al mesajului.

<5> Consumatorul 1 a început din nou.

ActiveMQ publică mesajele 5, OK, Consumator 1 și Consumator 2, toate le primesc și procesează. Abandon al mesajului.
-----------------------------
Ca să rezum:
activemq pur și simplu trimite mesaje către consumatorul lansat în prezent.
Consumatorii care se opresc vor rata multe mesaje și nu le vor mai putea primi.

Dacă mesajul trimis conține date importante de sincronizare a utilizatorului și le rata, datele utilizatorului nu sunt sincronizate.

Așadar, cum faci ca consumatorii să primească mesaje ratate când reîncep?

Răspunsul este un abonament persistent.
-----------------------------

Abonamentele obișnuite, fără a face distincție între consumatori, dacă sunt câteva capete în locație, aruncă câteva chifle aburite.
Pentru abonamentele persistente, trebuie să notezi numele consumatorului.
Zhang San a spus: Eu sunt Zhang San, sunt chifle la abur pentru mine, mă voi întoarce să le iau.
Li Si a spus: Eu sunt Li Si, sunt chifle la abur pentru mine, mă voi întoarce să le iau.
activemq a notat numele lui Zhang San și Li Si.

Apoi, când împărțim chiflele aburite, un cap dă totuși o chiflă aburită.
După divizare, când a văzut că Zhang San nu a vorbit, a însemnat că nu era acolo, așa că lasă-i una.
Li Si a vorbit, deci nu era nevoie să rămână.

Zhang San s-a întors, a căutat active și s-a uitat, acesta nu este Zhang San, adu-i repede chiflele aburite.
Poate fi o chiflă la abur sau poate fi 100 de chifle aburite, depinde câte chifle la abur a împărțit Zhang San de când a plecat o perioadă.

activemq distinge consumatorii prin clientID-ul și numele abonatului.
-----------------------------
Creează o conexiune
connection = connectionFactory.createConnection();
connection.setClientID("bbb"); Abonamentele persistente necesită setarea acestui lucru.
conexiune.start();

Creează o sesiune
Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);

Creează o destinație
Topic topic = session.createTopic("userSyncTopic"); Numele subiectului

MesajConsumator = sesiune.createConsumer(subiect); Abonament regulat
MessageConsumer consumer = session.createDurableSubscriber(topic,"bbb"); Abonamente persistente


Un alt aspect este că producătorul mesajului folosește modul persistent atunci când trimite mesaje
MesajProducător producător = ...;
producer.setDeliveryMode(DeliveryMode.PERSISTENT);
Dacă nu, este persistent implicit

(5) Dacă se folosește același "clientID", se consideră același consumator. Dacă două programe folosesc același "clientID", doar unul se poate conecta simultan la activemq, iar a doua conexiune va raporta o eroare.

(6) Setările activemq sunt în conf/activemq.xml, iar mesajele implicite sunt salvate în data/kahadb, iar mesajele nu se vor pierde la repornirea activemq.

Poți accesa http://localhost:8161/admin/index.jsp: poți vedea informații despre cozile curente, subiecte și abonați permanenți, trimite mesaje și multe altele.

Poți copia conținutul din activemq-jdbc.xml și să-l modifici, și poți salva mesajul în alte baze de date.




Precedent:Canalul VIP de generația a cincea pentru a lua bilete 360 s-a rupt, intră rapid la coada VIP
Următor:. Platforma .Net
 Proprietarul| Postat pe 09.01.2017 13:41:53 |
1 Compararea caracteristicilor tehnice ale cozii și subiectului
nume
Subiect
Coadă
Prezentare generală
Publică Abonează-te mesaje Publică mesaje de abonament
Punct-la-punct Punct-la-punct
Nu există stat
Datele de temă sunt fără stat în mod implicit.
Datele din coadă sunt salvate implicit ca fișier pe serverul MQ, de exemplu, Active MQ este de obicei stocat sub $AMQ_HOME\data\kr-store\data. Poate fi configurat și ca un depozit de baze de date.
Garanția integrității
Nu există nicio garanție că fiecare dată publicată de editor va fi acceptată de abonat.
Coada garantează că fiecare dată poate fi recepționată de către receptor.
dacă mesajul se va pierde
În general, când un editor publică un mesaj pentru un subiect, doar subredditul care ascultă adresa subiectului poate primi mesajul. Dacă nu ascultă sub subiect, subiectul se pierde.
Expeditorul trimite un mesaj către coada țintă, iar receptorul poate primi mesaje pe această coadă asincron. Mesajele din coadă nu se vor pierde dacă nu există un destinatar care să le preia pentru moment.
Politica de recepție a eliberării mesajelor
Politica de publicare și recepție a mesajelor unu-la-multe, mai mulți subreddits care ascultă aceeași adresă de subiect pot primi mesaje trimise de către editor. Subredditul primește notificarea către serverul mq
Politici unu-la-unu privind publicarea și recepția mesajelor, mesajele trimise de un expeditor pot fi primite doar de un singur destinatar. După ce receptorul primește, serverul MQ notifică serverul MQ că a fost primit, iar serverul MQ șterge sau ia alte acțiuni asupra mesajelor din coadă.

 Proprietarul| Postat pe 09.01.2017 13:42:15 |
Cea mai mare diferență între subiect și coadă este că subiectul are forma difuzării, notificând toți clienții online de ascultare că există un mesaj nou, iar clientul fără monitorizare nu va primi mesajul; Coada, pe de altă parte, notifică unul dintre mai mulți clienți de ascultare într-un mod peer-to-peer.

2 Comparația eficienței procesării mesajelor între metodele topic și cele de coadă
        Prin creșterea numărului de concurențe a clientului care ascultă, verifică dacă transmiterea mesajelor pe subiect va scădea semnificativ din cauza creșterii concurenței clientului care ascultă.
        Din rezultatele măsurate, nu există o diferență semnificativă în eficiența trimiterii și primirii mesajelor trimise prin metoda topic sub premisa unui abonat și a 100 de abonați, dar sub premisa concurenței a 500 de abonați (threads), diferența de eficiență este evidentă (datorită concurenței a 500 de fire de execuție, rata de utilizare a CPU-ului mașinii mele este de până la 70-90%, deci este imposibil de confirmat dacă este un blocaj de performanță cauzat de testul local sau un blocaj de performanță în metoda de trimitere a mesajelor topic). rezultând o scădere semnificativă a eficienței).
        Nu există o diferență semnificativă în eficiența trimiterii și primirii mesajelor trimise prin metoda topic și modul coadă, sub premisa unui abonat și 100 de abonați, dar sub premisa concurenței a 500 de abonați, eficiența modului topic este semnificativ mai mică decât cea a cozii.
        Eficiența trimiterii și primirii mesajelor trimise în metoda Cozii nu se schimbă semnificativ sub premisa unui abonat, 100 și 500 de abonați.
Date măsurate pe subiect:


Numărul total de mesaje trimise de expeditor
Numărul total de mesaje primite de toți abonații
Timpul mediu necesar pentru a trimite și primi mesaje
Abonat unic
100
100
101ms
100 de abonați
100
10000
103ms
500 de abonați
100
50000
14162ms

Date măsurate în coadă:


Numărul total de mesaje trimise de expeditor
Numărul total de mesaje primite de toți abonații
Timpul mediu necesar pentru a trimite și primi mesaje
Abonat unic
100
100
96ms
100 de abonați
100
100
96ms
500 de abonați
100
100
100ms

Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com