|
|
Опубліковано 09.01.2017 11:12:10
|
|
|

Налаштування постійної підписки ActiveMQ Встановивши режим доставки PERSISTENT для видавця, ви можете використовувати постійні підписки для підписників, що гарантує, що програма Pub/Sub отримує всі опубліковані повідомлення. Підписки на повідомлення поділяються на нетривалі та тривалі, і нетривалі підписки можуть отримувати повідомлення, надіслані на тему лише тоді, коли клієнт активний, тобто коли клієнт офлайн, повідомлення, надіслані на тему протягом цього періоду, будуть втрачені і ніколи не отримані. Коли клієнт офлайн, ActiveMQ зберігає всі повідомлення, надіслані суб'єкту, відповідно до його ID, а коли клієнт знову підключається до ActiveMQ, отримує всі повідомлення, надіслані суб'єкту, коли він офлайн. Постійні підписки збільшують накладні витрати і мають лише одного активного користувача в постійній підписці одночасно. Кроки для встановлення постійної підписки: 1. Налаштувати ідентифікатор клієнта для з'єднання; 2. Вказати назву підписки для теми підписки; Наведена вище комбінація має бути унікальною. Код реалізує постійні підписки
(1) При використанні черги, тобто під час черги, на повідомлення припадає лише один споживач, тому збереження дуже просте — просто зберегти його в базі даних
。 Тоді будь-який споживач може забрати його і утилізувати. Неважливо, якщо споживач вимикає його на деякий час.
(2) При використанні topic, тобто при підписці, кожне повідомлення може мати кількох споживачів, що є більш складним.
По-перше, припускаючи, що споживачі — це звичайні споживачі, ------------------------ Після запуску <1> було запущено Activemq, вийшла News 1, але, на жаль, жоден споживач зараз не починає, тобто жоден користувач не підписався. Отже
, новину було відкинуто.
<2> Споживач 1 запустився, підключився до activemq, підписався і чекав на повідомлення~~
activemq публікує повідомлення 2, гаразд, споживач 1 отримує і обробляє його. Відмова від повідомлення.
<3> Також запущено Consumer 2, підключений до activemq, підписаний і чекає на повідомлення~~
Activemq публікує повідомлення 3, OK, Consumer 1, Consumer 2 — усі отримані та оброблені. Відмова від повідомлення.
<4> Consumer 1 вимкнено.
Activemq публікує повідомлення 4, ОК, споживач 2 отримує і обробляє його. Відмова від повідомлення.
<5> Споживач 1 знову почався.
Activemq публікує повідомлення 5, OK, споживач 1 і споживач 2, які всі їх приймають і обробляють. Відмова від повідомлення. ----------------------------- Підсумовуючи: Activemq просто надсилає повідомлення поточному запущеному споживачу. Споживачі, які вимикаються, пропускають багато повідомлень і більше не зможуть їх отримувати.
Якщо надіслане повідомлення є важливим синхронізацією користувача і пропускає їх, дані користувача не синхронізуються.
Отже, як змусити споживачів отримувати пропущені повідомлення після перезавантаження?
Відповідь — постійна підписка. -----------------------------
Звичайні підписки, не розрізняючи споживачів, якщо в залі є кілька голів, кидають кілька парових булочок. Для постійних підписок потрібно записати ім'я споживача. Чжан Сан сказав: «Я — Чжан Сан, для мене парові булочки, я повернуся за ними.» Лі Сі сказав: «Я — Лі Сі, для мене є парові булочки, я повернуся за ними». activemq записала імена Чжан Сана та Лі Сі.
Потім, коли ділять парові булочки, одна голова все одно дає парову булочку. Після поділу, коли він побачив, що Чжан Сан не говорить, це означало, що його там немає, тож залиште йому розмову. Заговорив Лі Сі, тож залишатися не було потреби.
Чжан Сан повернувся, пошукав activemq і подивився, це не Чжан Сан, швидко принеси свої парові булочки. Це може бути одна парова булочка, а може бути 100 парових булочок — залежить від того, скільки парових булочок Чжан Сан поділив з моменту, як пішов на деякий час.
Activemq розрізняє споживачів за clientID та ім'ям абонента. ----------------------------- Створіть зв'язок connection = connectionFactory.createConnection(); connection.setClientID("bbb"); Постійні підписки вимагають цього налаштування. connection.start();
Створіть сесію Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
Створіть пункт призначення Тема теми = session.createTopic("userSyncTopic"); Назва теми
MessageConsumer consumer = session.createConsumer(тема); Регулярна підписка MessageConsumer consumer = session.createDurableSubscriber(topic,"bbb"); Постійні підписки
Ще один момент полягає в тому, що виробник повідомлення використовує постійний режим при надсилання повідомлень MessageProducer продюсер = ...; producer.setDeliveryMode(DeliveryMode.PERSISTENT); Якщо ні, то за замовчуванням він зберігається
(5) Якщо використовується той самий «clientID», це вважається тим самим споживачем. Якщо дві програми використовують один і той самий «clientID», лише одна може підключитися до activemq одночасно, а друге з'єднання видасть помилку.
(6) Налаштування activemq знаходяться у режимі conf/activemq.xml, а повідомлення за замовчуванням зберігаються у data/kahadb, і повідомлення не будуть втрачені при перезапуску activemq.
Ви можете отримати доступ http://localhost:8161/admin/index.jsp: переглядати інформацію про поточні черги, теми та постійних підписників, надсилати повідомлення та інше.
Ви можете скопіювати вміст у activemq-jdbc.xml та змінити його, а також зберегти повідомлення в інших базах даних. |
Попередній:Квитки на 360 квитків, п'яте покоління VIP-канал зламався, швидко зайдіть у VIP-чергуНаступний:. Платформа .Net
|