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. |