Для чого використовується ActiveMQ - чи можна застосувати концепцію обміну повідомленнями за допомогою бази даних?


116

Я подивився, і він використовував для надсилання повідомлень між двома системами.
Але чому? Чому б ти просто не використав Database?
Має бути якась особливість, ActiveMQу якої Databasesцього немає?


Схожий питання stackoverflow.com/q/2868800/460775
EMBarbosa

Відповіді:


178

Він використовується для надійної комунікації між двома розподіленими процесами.

Так, ви можете зберігати повідомлення в Базі даних, щоб спілкуватися між двома процесами, але, як тільки повідомлення надійде, вам доведеться DELETEце повідомлення, Це означає рядок INSERTі DELETEдля кожного повідомлення.
Коли ви намагаєтесь розширити масштаб передачі тисяч повідомлень в секунду, Бази даних, як правило, перепадають .

Посередньо орієнтований на повідомлення середній посуд [MOM], як ActiveMQз іншого боку, створений для обробки випадків використання.
Вони припускають, що повідомлення в здоровій системі буде видалено дуже швидко і можуть зробити оптимізацію, щоб уникнути накладних витрат .

Він також може надсилати повідомлення споживачам, замість того, щоб споживач мав опитування щодо нового повідомлення, виконуючи SQL-запит.
Це додатково зменшує затримку, пов'язану з обробкою нових повідомлень, що надсилаються в систему.


Приємне пояснення! Чи повинні два розподілені процеси бути однаковими? Я маю на увазі два екземпляри однієї програми?
Маверик

Ні, довільні програми можуть спілкуватися між собою через ActiveMQ. Наприклад, програми A і B можуть створювати черги AB і BA (читати: повідомлення для A від B та навпаки) та надсилати повідомлення один одному у відповідну чергу.
Олексій

чи можете ви подивіться, будь ласка, stackoverflow.com/questions/48579060/… ?
gstackoverflow

67

ActiveMQабо взагалі всі реалізації, орієнтовані на повідомлення, середнього програмного забезпечення (MOM) призначені для надсилання повідомлень між двома програмами або двома компонентами всередині однієї програми.

По суті, MOM та бази даних мають спільну основу в тому, що вони забезпечують транзакційне та стійке зберігання даних, з якого можна читати та писати.
Велика різниця полягає в схемі використання - там, де бази даних є дуже загальними та оптимізованими для складного пошуку по декількох таблицях, MOM оптимізується для читання повідомлень, по одному, у такий спосіб, як FIFO [Черга].

JMS, що є реалізацією API ActiveMQ, є важливим наріжним каменем у додатках Java Enterprise. Це робить повідомлення спільним і досить семантичним форматом, що полегшує інтеграцію між різними програмами.

Звичайно, є багато більш детальних функцій, які є лише в ActiveMQ, провідних протоколах OpenWire,STOMP і MQTT, JMS, EIPразом з Apache Camel, шаблони повідомлень , як «запит / відповідь» і «публікація / підписка», JMS Bridging, кластеризація ( » мережа брокерів "), які дозволяють масштабувати та розповсюджувати тощо.
Ви повинні трохи прочитати ці теми, якщо вас цікавить, оскільки вони досить великі.


25

ActiveMQмає чудову підтримку планувальника , а це означає, що ви можете запланувати відправлення свого повідомлення, яке буде доставлено у певний час .

Ми використовували цю функцію для надсилання нагадувань про ліки пацієнтам, які завантажують свої дані про ліки у сценарії охорони здоров’я.


3
Це досить круто. Ми використовували бібліотеку планування кварцу для подібних цілей нагадування.
Сіддхартха

Ми використовували базу даних Oracle Scheduled Jobsдля тих же цілей.
ahmednabil88

15

З RDBMS, коли ви обробляєте рядок даних, ви зазвичай оновлюєте прапор, який вказує на те, що рядок був оброблений, щоб обробка не повторювалася.

Однак із чергою повідомлень вам потрібно лише підтвердити повідомлення, і наступний споживач обробить наступне.

Різниця полягає в тому, що UPDATEстатистика в RDBMS - це дійсно повільна робота порівняно з acknowledgeактивомq.


8

Я хотів би наголосити на наступному:

Роз'єднано : Системи можуть спілкуватися без підключення. Черга лежить між системами, одна несправність системи ніколи не вплине на інші, оскільки спілкування здійснюється через чергу. Системи продовжують працювати, коли вони працюють.

Підтримка відновлення : Повідомлення в Чергах самі зберігаються. Повідомлення можуть бути відновлені пізніше, якщо чергу не виходить.

Надійне спілкування . Розгляньте систему, яка обробляє запити клієнта. У звичайних випадках система отримує 100 запитів на хвилину. Ця система є ненадійною, коли кількість запитів перевищує середню. У такому випадку черга може керувати запитами, і вона може періодично надсилати повідомлення на основі пропускної здатності системи, не порушуючи її.

Асинхронний : зв’язок клієнтського сервера не блокує. Після того, як клієнт надіслав запит на сервер, він може робити інші операції, не чекаючи відповіді. Коли відповідь отриманий клієнт може впоратися з цим у будь-який час.


7

З Вікіпедії

Apache ActiveMQ - це брокер повідомлень з відкритим кодом, написаний на Java разом із повноцінним клієнтом служби Java Message Service (JMS). Він надає "Особливості підприємства", що в цьому випадку означає активізацію зв'язку з більш ніж одним клієнтом або сервером

Щодо ваших запитів:

Чому б ти не використовував базу даних?

Вам слід використовувати базу даних для постійних даних, а не для тимчасових даних. Припустимо, що вам потрібно надіслати повідомлення від Відправника до Одержувача. Отримавши повідомлення, Одержувач виконує одну операцію (приймати, обробляти та забувати). Після обробки цього повідомлення вам це взагалі не потрібно. У цьому випадку зберігання повідомлення в стійкій базі даних не є правильним рішенням.

Я повністю згоден з @Hiram Chirino щодо вставки та видалення повідомлення в базі даних, якщо ви використовуєте базу даних замість системи обміну повідомленнями.

Переваги цієї статті та цієї статті

  1. Інтеграція підприємства : Дозволяє додаткам, побудованим на різних мовах та на різних операційних системах, інтегруватися один з одним
  2. Прозорість розташування : Клієнтські програми не повинні знати, де розміщені сервісні програми
  3. Надійне спілкування - виробники / споживачі повідомлень не повинні бути доступними одночасно
  4. Масштабування - дозволяє масштабувати горизонтально, додаючи більше послуг
  5. Асинхронний зв'язок - клієнт може запустити повідомлення та продовжувати іншу обробку замість блокування, поки служба не надіслала відповідь;
  6. Скорочення зв'язку - припущення, зроблені клієнтами та послугами, значно знижуються внаслідок попередніх 5 переваг. Служба може змінювати деталі про себе, включаючи її місцезнаходження, протокол та доступність, не впливаючи або порушуючи клієнта.

Має бути функція ActiveMQ має, що бази даних не роблять?

Тут багато. Перегляньте сторінку документації для отримання більш детальної інформації. Подивіться і на випадки використання .

Перегляньте цю презентацію, щоб зрозуміти внутрішні відомості ActiveMQ.


2

Припустимо, у вас є програма, яка використовується в декількох місцях одночасно. Припустімо також, що ваша програма має обробляти 1000 запитів за хвилину чи щось подібне, тому звичайні операції DB не можуть впоратися з такими операціями, Activemq виконує функцію обробки повідомлень, що приймає всі повідомлення в чергу, так що навіть якщо одна з ваших програм виходить з ладу в одному місці інше місцезнаходження не вплине.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.