Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 13505|Atbildi: 2

ActiveMQ pastāvīgā abonementa iestatījumi

[Kopēt saiti]
Publicēts 09.01.2017 11:12:10 | | |

ActiveMQ pastāvīgā abonementa iestatījumi
Iestatot izdevējam piegādes režīmu PASTĀVĪGS, abonentiem varat izmantot pastāvīgos abonementus, kas garantē, ka Pub/Sub programma saņem visus publicētos ziņojumus.
Ziņojumu abonementi ir sadalīti ilgtermiņa abonementos un ilgtermiņa abonementos, un ilgstoši abonementi var saņemt ziņojumus, kas nosūtīti uz tēmu, tikai tad, kad klients ir aktīvs, tas ir, kad klients ir bezsaistē, ziņojumi, kas nosūtīti uz tēmu šajā periodā, tiks zaudēti un nekad nav saņemti. Kad klients ir bezsaistē, ActiveMQ saglabās visus ziņojumus, kas nosūtīti tēmai atbilstoši tā ID, un, kad klients atkal izveido savienojumu ar ActiveMQ, tas saņems visus ziņojumus, kas nosūtīti tēmai, kad tas ir bezsaistē. Pastāvīgie abonementi palielina pieskaitāmās izmaksas, un pastāvīgā abonementā vienlaikus ir tikai viens aktīvs lietotājs. Darbības, lai izveidotu pastāvīgu abonementu:
1. Iestatiet savienojumam klienta ID;
2. Norādiet abonementa nosaukumu abonementa tēmai;
Iepriekš minētajai kombinācijai jābūt unikālai.
Kods ievieš pastāvīgus abonementus

(1) Izmantojot rindu, tas ir, rindā, vienā ziņojumā ir tikai viens patērētājs, tāpēc noturība ir ļoti vienkārša, vienkārši saglabājiet to datu bāzē

。 Tad jebkurš patērētājs to var paņemt un iznīcināt. Nav svarīgi, vai patērētājs to kādu laiku izslēdz.

(2) Izmantojot tēmu, tas ir, abonējot, katram ziņojumam var būt vairāki patērētāji, kas ir apgrūtinošāki.

Pirmkārt, pieņemot, ka patērētāji ir parastie patērētāji,
------------------------
Pēc <1> activemq palaišanas tika izlaists 1. jaunums, bet diemžēl neviens patērētājs nesāk tagad, tas ir, neviens patērētājs nav abonējis. Tātad

, ziņas tika atmestas.

<2> 1. patērētājs sākās, izveidoja savienojumu ar activemq, abonēja un gaidīja ziņojumu ~~

activemq publicē ziņojumu 2, OK, patērētājs 1 saņem un apstrādā to. Ziņojuma atteikšanās.

<3> Tiek palaists arī 2. patērētājs, kas ir savienots ar activemq, abonēts un gaida ziņojumu ~~

activemq publicē ziņojumu 3, OK, patērētājs 1, patērētājs 2 tiek saņemti un apstrādāti. Ziņojuma atteikšanās.

<4> 1. patērētājs ir izslēgts.

activemq publicē ziņojumu 4, OK, patērētājs 2 saņem un apstrādā to. Ziņojuma atteikšanās.

<5> 1. patērētājs atkal sākās.

activemq publicē ziņojumus 5, OK, patērētājs 1 un patērētājs 2 visi tos saņem un apstrādā. Ziņojuma atteikšanās.
-----------------------------
Rezumējot:
ActiveMQ vienkārši nosūta ziņojumus pašreiz uzsāktajam patērētājam.
Patērētāji, kuri izslēdz, palaidīs garām daudz ziņojumu un nevarēs tos saņemt vēlreiz.

Ja nosūtītais ziņojums ir svarīgs lietotāja sinhronizācijas dati un tie netiek sinhronizēti, lietotāja dati netiek sinhronizēti.

Tātad, kā panākt, lai patērētāji saņemtu nokavētus ziņojumus, kad tie restartējas?

Atbilde ir pastāvīgs abonements.
-----------------------------

Parastie abonementi, nenošķirot patērētājus, ja norises vietā ir dažas galvas, mest dažas tvaicētas maizītes.
Pastāvīgiem abonementiem jums jāieraksta patērētāja vārds.
Zhang San teica: Es esmu Zhang San, man ir tvaicētas maizītes, es atgriezīšos, lai tās iegūtu.
Li Si teica: Es esmu Li Si, man ir tvaicētas maizītes, es atgriezīšos, lai tās iegūtu.
activemq pierakstīja Zhang San un Li Si vārdus.

Tad, sadalot tvaicētas maizītes, viena galva joprojām dod tvaicētu maizīti.
Pēc sadalīšanas, kad viņš redzēja, ka Zhang San nerunā, tas nozīmēja, ka viņa tur nav, tāpēc atstājiet viņam vienu.
Li Si runāja, tāpēc nebija vajadzības palikt.

Zhang San atgriezās, meklēja activemq un paskatījās, tas nav Zhang San, ātri atnes savas tvaicētās maizītes.
Tā var būt viena tvaicēta maizīte vai 100 tvaicētas maizītes, tas ir atkarīgs no tā, cik tvaicētu maizītes Zhang San ir sadalījis, kopš viņš kādu laiku aizgāja.

activemq atšķir patērētājus pēc klienta ID un abonenta vārda.
-----------------------------
Savienojuma izveide
savienojums = connectionFactory.createConnection();
connection.setClientID ("bbb"); Pastāvīgiem abonementiem tas ir jāiestata.
savienojums.sākums();

Sesijas izveide
Sesijas sesija = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);

Galamērķa izveide
Tēmas tēma = session.createTopic("userSyncTopic"); Tēmas nosaukums

MessageConsumer consumer = session.createConsumer(tēma); Regulārais abonements
MessageConsumer consumer = session.createDurableSubscriber(tēma,"bbb"); Pastāvīgie abonementi


Vēl viens punkts ir tas, ka ziņojuma producents, nosūtot ziņojumus, izmanto pastāvīgu režīmu
MessageProducer producents = ...;
producer.setDeliveryMode(DeliveryMode.PERSISTENT);
Ja nē, tas pēc noklusējuma ir pastāvīgs

(5) Ja tiek izmantots viens un tas pats "klienta ID", tas tiek uzskatīts par vienu un to pašu patērētāju. Ja divas programmas izmanto vienu un to pašu "clientID", tikai viena var izveidot savienojumu ar activemq vienlaicīgi, un otrais savienojums ziņos par kļūdu.

(6) Activemq iestatījumi ir conf / activemq.xml, un noklusējuma ziņojumi tiek saglabāti datos / kahadb, un ziņojumi netiks zaudēti, restartējot activemq.

Varat piekļūt http://localhost:8161/admin/index.jsp: skatīt informāciju par pašreizējām rindām, tēmām un pastāvīgajiem abonentiem, sūtīt ziņojumus un veikt citas darbības.

Varat kopēt activemq-jdbc.xml saturu un modificēt to, kā arī saglabāt ziņojumu citās datu bāzēs.




Iepriekšējo:360 biļešu sagrābšana piektās paaudzes VIP kanāls saplaisājis, ātri ieejiet VIP līnijā
Nākamo:. .Net platforma
 Saimnieks| Publicēts 09.01.2017 13:41:53 |
1 Rindas un tēmas tehnisko parametru salīdzinājums
vārds
Tēma
Rinda
Pārskats
Publicēšana Abonēšana ziņojumapmaiņa Abonēšanas ziņojumu publicēšana
Punkts uz punktu
Nav valsts
Tēmas dati pēc noklusējuma ir bezvalstnieki.
Rindas dati pēc noklusējuma tiek saglabāti kā fails MQ serverī, piemēram, aktīvais MQ parasti tiek glabāts sadaļā $AMQ_HOME\data\kr-store\data. To var konfigurēt arī kā DB krātuvi.
Integritātes garantija
Nav garantijas, ka abonents pieņems visus izdevēja publicētos datus.
Rinda garantē, ka saņēmējs var saņemt visus datus.
vai ziņojums tiks zaudēts
Vispārīgi runājot, kad izdevējs publicē ziņojumu par tēmu, ziņojumu var saņemt tikai apakšgrupa, kas klausās tēmas adresi. Ja nav apakšklausīšanās, tēma tiek zaudēta.
Sūtītājs nosūta ziņojumu mērķa rindai, un saņēmējs var saņemt ziņojumus šajā rindā asinhroni. Ziņojumi rindā netiks zaudēti, ja pagaidām nav saņēmēja, kas tos paņemtu.
Ziņojumu izlaišanas saņemšanas politika
Ziņojumu publicēšanas un saņemšanas politika "viens pret daudziem", vairāki abonenti, kas klausās vienu un to pašu tēmas adresi, var saņemt izdevēja sūtītos ziņojumus. Apakš saņem paziņojumu mq serverim
Viens pret vienu ziņojumu publicēšanas un saņemšanas politikas, sūtītāja sūtītos ziņojumus var saņemt tikai viens saņēmējs. Pēc tam, kad saņēmējs saņem, MQ serveris paziņo MQ serverim, ka tas ir saņemts, un MQ serveris izdzēš rindā esošos ziņojumus vai veic citas darbības ar tiem.

 Saimnieks| Publicēts 09.01.2017 13:42:15 |
Lielākā atšķirība starp tēmu un rindu ir tā, ka tēma ir apraides veidā, paziņojot visiem tiešsaistes klausīšanās klientiem, ka ir jauns ziņojums, un klients bez uzraudzības nesaņems ziņojumu; No otras puses, rinda paziņo vienam no vairākiem klausīšanās klientiem vienādranga veidā.

2 Ziņojumu apstrādes efektivitātes salīdzinājums starp tēmas un rindas metodēm
        Palielinot klausīšanās klienta vienlaicīguma skaitu, pārbaudiet, vai tēmas ziņojuma virzīšana ievērojami samazināsies, jo palielinās klausīšanās klienta vienlaicīgums.
        No izmērītajiem rezultātiem nav būtiskas atšķirības ar tēmas metodi nosūtīto ziņojumu sūtīšanas un saņemšanas efektivitātē viena abonenta un 100 abonentu priekšnoteikumā, bet saskaņā ar 500 abonentu (pavedienu) vienlaicīguma priekšnoteikumu efektivitātes atšķirība ir acīmredzama (500 pavedienu vienlaicīguma dēļ manas mašīnas CPU izmantošanas līmenis ir pat 70-90%, tāpēc nav iespējams apstiprināt, vai tas ir veiktspējas vājš kakls, ko izraisa mans vietējais tests, vai veiktspējas vājā vieta tēmas ziņojumu nosūtīšanas metodē, kā rezultātā tik ievērojami samazinās efektivitāte).
        Nav būtiskas atšķirības ziņojumu sūtīšanas un saņemšanas efektivitātē, kas nosūtīti ar tēmas metodi un rindas režīmu viena abonenta un 100 abonentu priekšnoteikumā, bet 500 abonentu vienlaicīguma priekšnoteikumā tēmas režīma efektivitāte ir ievērojami zemāka nekā rindas režīma efektivitāte.
        Rindas metodē nosūtīto ziņojumu sūtīšanas un saņemšanas efektivitāte būtiski nemainās, ņemot vērā vienu abonentu, 100 abonentus un 500 abonentus.
Tēmas izmērītie dati:


Sūtītāja nosūtīto ziņojumu kopējais skaits
Visu abonentu saņemto ziņojumu kopējais skaits
Vidējais laiks, kas nepieciešams ziņojumu nosūtīšanai un saņemšanai
Viens abonents
100
100
101 ms
100 abonenti
100
10000
103 ms
500 abonenti
100
50000
14162 ms

Rindas mērījumu dati:


Sūtītāja nosūtīto ziņojumu kopējais skaits
Visu abonentu saņemto ziņojumu kopējais skaits
Vidējais laiks, kas nepieciešams ziņojumu nosūtīšanai un saņemšanai
Viens abonents
100
100
96 ms
100 abonenti
100
100
96 ms
500 abonenti
100
100
100 ms

Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com