Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 13505|Відповідь: 2

Налаштування постійної підписки ActiveMQ

[Копіювати посилання]
Опубліковано 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
 Орендодавець| Опубліковано 09.01.2017 13:41:53 |
1 Порівняння технічних характеристик черги та теми
Ім'я
Тема
Черга
Огляд
Опублікувати Підписатися повідомлення Опублікувати підписки
Точка-точка
Держави не існує
Дані теми за замовчуванням є безстанними.
Дані черги за замовчуванням зберігаються як файл на сервері MQ, наприклад, активний MQ зазвичай зберігається у $AMQ_HOME\data\kr-store\data. Його також можна налаштувати як сховище бази даних.
Гарантія цілісності
Немає гарантії, що кожен дані, опублікований видавцем, буде прийнятий підписником.
Черга гарантує, що кожен фрагмент даних може бути прийнятий отримувачем.
чи буде повідомлення втрачено
Загалом, коли видавець публікує повідомлення на тему, лише підрозділ, який слухає адресу теми, може отримати це повідомлення. Якщо немає підрозділу, тема втрачається.
Відправник надсилає повідомлення цільовій черзі, і отримувач може отримувати повідомлення в цій черзі асинхронно. Повідомлення в черзі не будуть втрачені, якщо наразі немає отримувача, який міг би їх прийняти.
Політика прийому повідомлень
Політика публікації та отримання повідомлень «один до багатьох»: кілька сабреддітів, які слухають одну й ту ж адресу теми, можуть отримувати повідомлення, надіслані видавцем. Сабреддіт отримує сповіщення на mq-сервер
Політики публікації та отримання повідомлень один на один, повідомлення, надіслані відправником, можуть бути отримані лише одним отримувачем. Після отримання отримувачем MQ-сервер повідомляє MQ-сервер про отримання, і MQ-сервер видаляє або виконує інші дії щодо повідомлень у черзі.

 Орендодавець| Опубліковано 09.01.2017 13:42:15 |
Найбільша різниця між темою та чергою полягає в тому, що тема відбувається у вигляді трансляції, сповіщаючи всіх клієнтів онлайн-прослуховування про нове повідомлення, і клієнт без моніторингу не отримає повідомлення; Черга, навпаки, сповіщає одного з багатьох прослуховуючих клієнтів у одноранговому форматі.

2 Порівняння ефективності обробки повідомлень між методами теми та черги
        Збільшуючи кількість паралельності слухаючого клієнта, перевіряйте, чи зменшиться суттєво просування повідомлення теми через збільшення конкурентності слухаючого клієнта.
        З виміряних результатів немає суттєвої різниці в ефективності надсилання та отримання повідомлень, надісланих методом теми за принципом одного абонента і 100 підписників, але за умови 500 абонентів (потоків) паралелізм очевидний (через паралельність у 500 потоків рівень завантаження процесора на моєму комп'ютері становить 70-90%, тому неможливо підтвердити, чи це вузьке місце продуктивності, спричинене моїм локальним тестом, чи вузьке місце продуктивності у методі передачі тематичних повідомлень), що призвело до значного зниження ефективності).
        Суттєвої різниці в ефективності надсилання та отримання повідомлень, надісланих методом теми та режимом черги, при принципі одного абонента і 100 абонентів, немає суттєвої різниці, але за умови конкурентності 500 абонентів ефективність режиму теми значно нижча, ніж у черзі.
        Ефективність надсилання та отримання повідомлень, надісланих методом Черги, суттєво не змінюється за умови одного абонента, 100 абонентів і 500 абонентів.
Тематичні дані вимірювання:


Загальна кількість повідомлень, надісланих відправником
Загальна кількість повідомлень, отриманих усіма підписниками
Середній час, необхідний для надсилання та отримання повідомлень
Один абонент
100
100
101мс
100 підписників
100
10000
103 мс
500 підписників
100
50000
14162мс

Дані за чергою:


Загальна кількість повідомлень, надісланих відправником
Загальна кількість повідомлень, отриманих усіма підписниками
Середній час, необхідний для надсилання та отримання повідомлень
Один абонент
100
100
96мс
100 підписників
100
100
96мс
500 підписників
100
100
100 мс

Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com