Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 13505|Atsakyti: 2

ActiveMQ nuolatinės prenumeratos parametrai

[Kopijuoti nuorodą]
Paskelbta 2017-01-09 11:12:10 | | |

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.




Ankstesnis:360° bilietų griebimas penktos kartos VIP kanalas nulaužtas, greitai įeikite į VIP liniją
Kitą:. .Net platforma
 Savininkas| Paskelbta 2017-01-09 13:41:53 |
1 Eilės ir temos techninių charakteristikų palyginimas
vardas, pavadinimas
Tema
Eilė
Apžvalga
Publikuoti Prenumeruoti pranešimus Publikuoti prenumeratos pranešimus
Taškas į tašką
Nėra valstybės
Temos duomenys pagal numatytuosius nustatymus yra be būsenos.
Eilės duomenys pagal numatytuosius nustatymus įrašomi kaip failas MQ serveryje, pavyzdžiui, aktyvus MQ paprastai saugomas $AMQ_HOME\data\kr-store\data. Jis taip pat gali būti sukonfigūruotas kaip DB saugykla.
Vientisumo garantija
Nėra garantijos, kad prenumeratorius priims visus leidėjo paskelbtus duomenis.
Eilė garantuoja, kad imtuvas gali gauti visus duomenis.
ar pranešimas bus prarastas
Paprastai kalbant, kai leidėjas paskelbia pranešimą tema, pranešimą gali gauti tik tas abonentas, kuris klausosi temos adreso. Jei nėra papildomo klausymo, tema prarandama.
Siuntėjas siunčia pranešimą į paskirties eilę, o gavėjas gali gauti pranešimus šioje eilėje asinchroniškai. Pranešimai eilėje nebus prarasti, jei kol kas nėra gavėjo, kuris juos paimtų.
Pranešimo išleidimo gavimo strategija
Pranešimų publikavimo ir gavimo politika "Vienas su daugeliu", keli abonentai, klausantys to paties temos adreso, gali gauti leidėjo siunčiamus pranešimus. Sub gauna pranešimą į mq serverį
Asmeninė pranešimų publikavimo ir gavimo politika, siuntėjo siunčiamus pranešimus gali gauti tik vienas gavėjas. Kai gavėjas gauna, MQ serveris praneša MQ serveriui, kad jis buvo gautas, o MQ serveris panaikina arba atlieka kitus veiksmus su eilėje esančiais pranešimais.

 Savininkas| Paskelbta 2017-01-09 13:42:15 |
Didžiausias skirtumas tarp temos ir eilės yra tas, kad tema yra transliacijos forma, pranešant visiems internetiniams klausytojams, kad yra naujas pranešimas, o klientas be stebėjimo negaus pranešimo; Kita vertus, "Queue" praneša vienam iš kelių klausytojų "peer-to-peer" būdu.

2 Pranešimų apdorojimo efektyvumo palyginimas tarp temos ir eilės metodų
        Padidindami klausytojo kliento sutapimų skaičių, patikrinkite, ar temos pranešimas žymiai sumažės dėl klausytojo sutapimo padidėjimo.
        Iš išmatuotų rezultatų nėra reikšmingo skirtumo tarp pranešimų, siunčiamų teminiu metodu, siuntimo ir gavimo efektyvumo, atsižvelgiant į vieno abonento ir 100 abonentų prielaidą, tačiau esant prielaidai, kad 500 abonentų (gijų) lygiagrečiai, efektyvumo skirtumas yra akivaizdus (dėl 500 gijų sutapimo mano įrenginio procesoriaus naudojimo lygis siekia net 70–90%, todėl neįmanoma patvirtinti, ar tai yra našumo kliūtis, kurią sukėlė mano vietinis testas, ar našumo kliūtis temos pranešimų siuntimo metode, dėl to labai sumažėjo efektyvumas).
        Nėra reikšmingo skirtumo tarp pranešimų, siunčiamų temos metodu ir eilės režimu, vieno abonento ir 100 abonentų prielaidoje, tačiau esant prielaidai, kad 500 abonentų vienu metu, temos režimo efektyvumas yra žymiai mažesnis nei eilės.
        Eilės metodu siunčiamų pranešimų siuntimo ir gavimo efektyvumas reikšmingai nesikeičia, jei yra vienas abonentas, 100 abonentų ir 500 abonentų.
Temos matuojami duomenys:


Bendras siuntėjo išsiųstų pranešimų skaičius
Bendras visų prenumeratorių gautų pranešimų skaičius
Vidutinis pranešimų siuntimo ir gavimo laikas
Vienas abonentas
100
100
101 ms
100 prenumeratorių
100
10000
103 ms
500 prenumeratorių
100
50000
14162ms

Eilėje išmatuoti duomenys:


Bendras siuntėjo išsiųstų pranešimų skaičius
Bendras visų prenumeratorių gautų pranešimų skaičius
Vidutinis pranešimų siuntimo ir gavimo laikas
Vienas abonentas
100
100
96 ms
100 prenumeratorių
100
100
96 ms
500 prenumeratorių
100
100
100ms

Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com