ActiveMQ állandó előfizetési beállítások A kiadó PERSISTENT delivery módjának beállításával az előfizetők állandó előfizetéseket használhatsz, ami garantálja, hogy a Pub/Sub program minden közzétett üzenetet megkap. Az üzenet-előfizetések nem tartós és tartós előfizetésekre oszlanak, és a nem tartós előfizetések csak akkor kaphatnak üzeneteket, amelyeket egy témához küldenek, ha az ügyfél aktív, vagyis amikor az ügyfél offline van, az adott témához küldött üzenetek elvesznek és soha nem kapják meg. Amikor az ügyfél offline van, az ActiveMQ elmenti az összes üzenetet, amelyet az alanynak küldött az azonosítója alapján, és amikor a kliens újra csatlakozik az ActiveMQ-hoz, akkor az összes üzenetet megkapja, amikor az offline állapotban van. A tartós előfizetések növelik a költségeket, és egyszerre csak egy aktív felhasználó van egy állandó előfizetésben. Lépések a tartós előfizetés létrehozásához: 1. Állítsd be az ügyfélazonosítót a kapcsolathoz; 2. Jelölje meg az előfizetés témájának előfizetési nevét; A fenti kombinációnak egyedinek kell lennie. A kód tartós előfizetéseket valósít meg
(1) Queue használatakor, vagyis sorban áll, üzenetenként csak egy felhasználó van, így a kitartás nagyon egyszerű, egyszerűen mentsd el az adatbázisba
。 Ezután bármelyik fogyasztó felveheti és eldobhatja. Nem számít, ha egy fogyasztó egy időre kikapcsolja.
(2) Téma használatakor, vagyis feliratkozáskor minden üzenetnek több felhasználója is lehet, ami még problémásabb.
Először is, feltételezve, hogy a fogyasztók hétköznapi fogyasztók, ------------------------ Az <1 elindítása után az activemq elindult> megjelent a News 1, de sajnos most már egyetlen fogyasztó sem kezd, vagyis senki sem iratkozott. Szóval
, a hírt elhagyták.
<2> Consumer 1 elindult, csatlakozott az activemq-hoz, feliratkozott, és várt egy üzenetre~~
Az activemq 2-es üzenetet küld, rendben, a fogyasztó 1 megkapja és feldolgozza azt. Üzenet elhagyása.
<3> A Consumer 2 is elindult, csatlakozott az activemq-hoz, feliratkozott, és üzenetre vár~~
Az activemq közzéteszi a 3-as üzenetet, OK, a fogyasztó 1-et, a fogyasztó 2-t mind megkapják és feldolgozták. Üzenet elhagyása.
<4> Consumer 1 ki van kapcsolva.
Az activemq 4-es üzenetet küld, rendben, a fogyasztó 2 megkapja és feldolgozza azt. Üzenet elhagyása.
<5> Consumer 1 újra elindult.
Az activemq közzéteszi az 5, OK, a fogyasztó 1 és a fogyasztó 2 üzeneteket, amelyek mind megkapják és feldolgozzák azokat. Üzenet elhagyása. ----------------------------- Összefoglalva: Az ActiveMQ egyszerűen üzeneteket küld a jelenleg elindított fogyasztónak. Azok a fogyasztók, akik kikapcsolják, sok üzenetet kihagynak, és nem fogják őket újra megkapni.
Ha az üzenet fontos felhasználói szinkronizációs adat, de nem szinkronizálódik, akkor a felhasználói adatok nem szinkronizálódnak.
Hogyan lehet elérni, hogy a fogyasztók elhagyott üzeneteket kapjanak, amikor újraindítják?
A válasz a tartós előfizetés. -----------------------------
A hétköznapi előfizetések, anélkül, hogy megkülönböztetnék a fogyasztókat, ha van néhány fej a helyszínen, dobnak pár gőzölt zsemlét. Tartós előfizetésekhez fel kell jegyezni a fogyasztó nevét. Zhang San azt mondta: Zhang San vagyok, van párolt zsemle nekem, visszajövök, hogy elhozzam őket. Li Si azt mondta: Én vagyok Li Si, van párolt zsemle nekem, visszajövök értük. az activemq feljegyezte Zhang San és Li Si nevét.
A gőzölt zsemlék elosztásakor az egyik fej még mindig gőzölt zsemle ad. A megosztás után, amikor látta, hogy Zhang San nem szól, az azt jelentette, hogy nincs ott, szóval hagyj neki egyet. Li Si beszélt, így nem kellett maradnia.
Zhang San visszajött, megkeresett az aktivmq-t, és megnézte: ez nem Zhang San, hozza gyorsan a gőzölt zsemléjét. Lehet, hogy egy gőzölt zsemlé, vagy akár 100 gőzölt zsemlé, attól függ, hány gőzölt zsemlét osztott Zhang San mióta egy időre elment.
az activemq a fogyasztókat clientID és előfizető név alapján különbözteti meg. ----------------------------- Teremts kapcsolatot connection = connectionFactory.createConnection(); connection.setClientID("bbb"); Állandó előfizetésekhez ezt kell beállítani. connection.start();
Hozz létre egy szekciót Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
Cél létrehozása Topic topic = session.createTopic("userSyncTopic"); Téma neve
MessageConsumer = session.createConsumer(topic); Rendszeres előfizetés MessageConsumer = session.createDurableSubscriber(topic,"bbb"); Állandó előfizetések
Egy másik pont, hogy az üzenet készítője állandó módot használ üzenetküldéskor MessageProducer producer = ...; producer.setDeliveryMode(DeliveryMode.PERSISTENT); Ha nem, akkor alapértelmezés szerint tartós
(5) Ha ugyanazt a "clientID"-t használják, akkor ugyanaznak a fogyasztónak tekintik. Ha két program ugyanazt a "clientID-t" használja, csak az egyik tud egyszerre csatlakozni az activemq-hoz, és a második kapcsolat hibát jelent.
(6) Az activemq beállításai conf/activemq.xml-ban vannak, az alapértelmezett üzenetek a data/kahadb formátumban vannak elmentve, és az üzenetek nem vesznek el az activemq újraindításakor.
Hozzáférhetsz http://localhost:8161/admin/index.jsp: megtekintheted az aktuális sorokat, témákat és állandó előfizetőket, üzenetküldést és még sok mást.
A activemq-jdbc.xml tartalmát másolhatod és módosíthatod, és elmentheted az üzenetet más adatbázisokban. |