ActiveMQ або RabbitMQ або ZeroMQ або [закрито]


645

Нам буде цікаво почути будь-який досвід щодо плюсів і мінусів ActiveMQ проти RabbitMQ проти ZeroMQ. Інформація про будь-які інші цікаві черги повідомлень також вітається.


2
Я новачок у черзі повідомлень і читав докладніше про реальний випадок використання цього сайту на сайті stackoverflow.com/q/1035949/181870 . Пізніше, гуглюючи за темами / статтями, пов’язаними з чергою повідомлень (зокрема, JMS), я натрапив на OpenJMS - реалізацію з відкритим кодом із програмним забезпеченням Java Message Service API Sun Microsystems Sun 1.1. Що мене дивує, що це не висвітлюється / обговорюється тут? Я просто хотів перевірити з громадою, чи пов’язаний OpenJMS з цією темою / дискусією, і якщо так, відповідно до ОП, допоможе будь-який досвід із плюсами та мінусами того ж.
Гнанам

3
Через 3 роки замітка для людей, які переглядають тут ... подумайте, ЧОМУ ви хочете використовувати середнє програмне забезпечення для встановлення черги повідомлень. Якщо причина полягає в розподілі завдань у кластері, подивіться на Celery. Він працює на більш високому рівні абстракції, ніж рішення у стилі MQ, використовує RabbitMQ для переміщення повідомлень, але має видатну підтримку семантики, що відповідає конкретній задачі.
Кріс Джонсон

Відповіді:


342

Редагувати: Моя початкова відповідь сильно зосередилась на AMQP. Я вирішив переписати це, щоб запропонувати ширший погляд на цю тему.

Ці 3 технології обміну повідомленнями мають різні підходи до побудови розподілених систем:

RabbitMQ - одна з провідних реалізацій протоколу AMQP (разом з Apache Qpid). Тому він реалізує архітектуру брокера, тобто повідомлення надходять у чергу на центральному вузлі, перш ніж надсилатись клієнтам. Такий підхід робить RabbitMQ дуже простим у використанні та розгортанні, оскільки розширені сценарії, такі як маршрутизація, балансування завантаження або постійне чергування повідомлень, підтримуються лише в декількох рядках коду. Однак це також робить його менш масштабованим та "повільнішим", оскільки центральний вузол додає затримки, а конверти повідомлень досить великі.

ZeroMq - це дуже легка система обміну повідомленнями, спеціально розроблена для сценаріїв з високою пропускною здатністю / низькою затримкою, як той, який ви можете знайти у фінансовому світі. Zmq підтримує безліч сучасних сценаріїв обміну повідомленнями, але всупереч RabbitMQ, вам доведеться реалізувати більшість з них самостійно, комбінуючи різні фрагменти рамки (наприклад, розетки та пристрої). Zmq дуже гнучка, але вам доведеться вивчити 80 сторінок або близько того посібника (який я рекомендую прочитати будь-кому, хто пише розподілену систему, навіть якщо ви не використовуєте Zmq), перш ніж ви зможете зробити щось складніше, ніж надсилати повідомлення між 2 однолітками.

ActiveMQ знаходиться в середній частині. Як і Zmq, його можна розгорнути як з топологіями брокера, так і з P2P. Як і RabbitMQ, простіше реалізувати розширені сценарії, але зазвичай ціною необробленої продуктивності. Це швейцарський армійський ніж для обміну повідомленнями :-).

Нарешті, всі 3 товари:

  • мати клієнтські apis для найбільш поширених мов (C ++, Java, .Net, Python, Php, Ruby,…)
  • мати потужну документацію
  • активно підтримуються

22
Хоча це правда, я не впевнений, чи прийняття AMQP має сильну кореляцію з початковим питанням. Я думаю, що для вибору черги повідомлень є більш важливі міркування, ніж те, який базовий дротяний протокол використовується.
StaxMan

8
Питання не зазначає, чи вимагає AMQP, але ця відповідь орієнтована на AMQP. Якби ми взяли на себе JMS як вимогу, відповідь в основному була би зворотною: ActiveMQ є найпопулярнішим, RabbitMQ має певну підтримку, яка, ймовірно, повинна працювати. Якщо не передбачається жодний провідний протокол: див. Інші відповіді.
Флетч

19
Працюючи в RabbitMQ та ActiveMQ, я б рекомендував вам триматися подалі від ActiveMQ. Випуски дуже гнучкі, і у мене не було кінця проблем із тим, що машини знижуються, а пам'ять протікає і т.д. ... RabbitMQ, з іншого боку, просто працює. Після того, як я підключив його, я НІКОЛИ не повинен був переглянути це знову. Він просто робить те, що потрібно. Якщо вам подобається, я маю простий підручник із RabbitMQ у своєму блозі jarloo.com/rabbitmq-c-tutorial
Келлі

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

1
Посібник по ZMQ теж справді смішний і добре прочитаний :)
meawoppl

174

Чому ви пропустили Воробея , Старлінга , Kestrel , Amazon SQS , Beanstalkd , Kafka , IronMQ ?

Сервери черги повідомлень

Сервери черги повідомлень доступні різними мовами: Erlang (RabbitMQ), C (beanstalkd), Ruby (Starling або Sparrow), Scala (Kestrel, Kafka) або Java (ActiveMQ). Короткий огляд можна знайти тут

Горобчик

  • написав Алекс Маккау
  • Воробей - це легка черга, написана на Рубі, яка "говорить в пам'яті"

Старлінг

Пустощі

  • написав Робі Пойнтер
  • Клон зірки, написаний у Scala (порт Старлінга від Рубі до Скали)
  • Черги зберігаються в пам'яті, але реєструються на диску

КроликMQ

  • RabbitMQ - сервер черги повідомлень в Ерланге
  • зберігає завдання в пам'яті (черга повідомлень)

Apache ActiveMQ

  • ActiveMQ - це брокер повідомлень з відкритим кодом на Java

Beanstalkd

Amazon SQS

Кафка

  • Написано на LinkedIn у Scala
  • Використовується LinkedIn для завантаження обробки всіх сторінок та інших переглядів
  • За умовчанням використання персистентності використовує кеш диска ОС для гарячих даних (має більшу пропускну здатність, ніж будь-який із перерахованих вище з увімкненою стійкістю)
  • Підтримується як в режимі он-лайн, так і в режимі офлайн-обробки

ZMQ

  • Бібліотека сокет, яка виступає як рамки одночасності
  • Швидше, ніж TCP, для кластерних продуктів та суперкомп'ютерів
  • Переносить повідомлення через inproc, IPC, TCP та багатоадресову передачу
  • Підключіть N-до-N через fanout, pubsub, трубопровід, запит-відповідь
  • Асинхронний введення / виведення для масштабованих програм, що передають багатоядерні повідомлення

EagleMQ

  • EagleMQ - це відкритий джерело, високопродуктивний та легкий менеджер черг.
  • Написано на С
  • Зберігає всі дані в пам'яті та підтримує стійкість.
  • У нього є власний протокол. Підтримує роботу з чергами, маршрутами та каналами.

IronMQ

  • IronMQ
  • Написано в Go
  • Повністю керована служба черги
  • Доступний як у хмарній версії, так і в приміщенні

Я сподіваюся, що це буде нам корисно. джерело


Чи маєте ви якусь ідею / думали додати / коментувати моє запитання, поставлене в цій області коментарів, тут - stackoverflow.com/questions/731233/… ?
Гнанам

Чи мають вони суперечки? Я завжди знаходив це питання із системами черг. Наприклад, блокування виробника, якщо черга повна на основі кількості елементів (а не на ресурсах пам'яті).
ш.

1
queues.io - Ви хочете додати тут відсутні деталі порівняно з ними.
asyncwait

83

Більше інформації, ніж ви хотіли б знати:

http://wiki.secondlife.com/wiki/Message_Queue_Evaluation_Notes


ОНОВЛЕННЯ

Просто уточнюючи те, що Павло додав у коментарі. Згадувалося вище сторінка помер після 2010 року, так що читати з дрібкою солі. Багато речей було змінено за 3 роки.

Історія сторінки Wiki


7
Я думаю, що хлопці думають про черги неправильно - черги не повинні бути 1 (або більше) на користувача. Вони повинні ставити свою роботу в кілька черг, а потім використовувати. папки "Вхідні" (або mboxes) для кожного користувача.
Майкл Дірдеуфф

1
Майкл - хочете детальніше розробити? Проблема полягає в доставці в режимі реального часу в системі групового чату. Якщо я правильно розумію, ви говорите про міцний механізм зберігання повідомлень як кінцевої точки (вхідних)? Якщо так, то це не відповідає рахунку, вони хочуть негайно доставити чат, а клієнти - прямі абоненти? Наскільки я можу сказати, що кількість черг на основі тем не є оптимізованим випадком використання?
Джош

1
Оновлення: Вікі-сторінка SecondLife була написана у 2009 році. На сьогодні, у 2013 році, багато конкретних моментів, згаданих щодо різних черг повідомлень, які вони досліджували, вже не є актуальними через постійні вдосконалення всіх MQ. Більшість або всі тестування, які вони перевіряли, в деякому сенсі вже є кращими.
Пол Легато

71

Це дійсно залежить від вашого використання.

Порівнювати 0MQ з ActiveMQ або RabbitMQ не є справедливим. ActiveMQ та RabbitMQ - це системи обміну повідомленнями, які потребують встановлення та адміністрування. Вони пропонують особливо багато, ніж ZeroMQ. У них справжні постійні черги, підтримка транзакцій тощо.

ZeroMQ - це полегшена реалізація розетки, орієнтована на повідомлення. Він також підходить для асинхронного програмування в процесі роботи. Можна запустити "Enterprise Messaging System" через ZeroMQ, але вам доведеться багато реалізувати самостійно.

Тому:

ActiveMQ, RabbitMQ, Websphere MQ & MSMQ - це "Черги повідомлень підприємства"

ZeroMQ - це бібліотека IPC, орієнтована на повідомлення.


7
Ви можете використовувати більше одного. rabbitmq.com/blog/2010/10/18/rabbitmq0mq-bridge розповідає про те, як можна використовувати 0MQ для переходу між декількома брокерами RabbitMQ та створення федерації, що є незв'язаною.
Майкл Діллон

34

Там же порівняння між RabbitMQ і ActiveMQ тут . Активність у ActiveMQ налаштована таким чином, щоб гарантувати доставку повідомлень, що може створювати враження своєї повільності порівняно з менш надійними системами обміну повідомленнями. Ви завжди можете змінити конфігурацію для продуктивності, якщо хочете, і отримаєте принаймні такі ж хороші показники, як і будь-яка інша система обміну повідомленнями. Принаймні, у вас є такий варіант. На форумах знайдеться багато інформації та поширених питань щодо ActiveMQ для налаштування масштабування, продуктивності та високої доступності. Крім того, ActiveMQ буде підтримувати AMQP 1.0, коли специфікація буде завершена, разом з іншими провідними форматами, такими як STOMP.

Ще одним плюсом для ActiveMQ є його проект Apache, тому в спільноті розробників існує різноманітність - і він не пов'язаний з однією компанією.


22

Я не використовував ActiveMQ або RabbitMQ, але використовував ZeroMQ. Як я бачу, велика різниця між ZeroMQ і ActiveMQ і т.д. полягає в тому, що 0MQ без посередників і не має надійності для доставки повідомлень. Якщо ви шукаєте простий у використанні API обміну повідомленнями, що підтримує безліч моделей обміну повідомленнями, транспорту, платформи та прив'язки мови, то 0MQ, безумовно, варто переглянути. Якщо ви шукаєте повноцінну платформу обміну повідомленнями, то 0MQ може не відповідати рахунку.

Дивіться www.zeromq.org/docs:cookbook для безлічі прикладів того, як можна використовувати 0MQ.

Я успішно використовую 0MQ для передачі повідомлень в додатку моніторингу використання електроенергії (див http://rwscott.co.uk/2010/06/14/currentcost-envi-cc128-part-1/ )


14

Я використовую zeroMQ. Я хотів просту систему передачі повідомлень, і мені не потрібне ускладнення брокера. Я також не хочу мати величезну корпоративну систему, орієнтовану на Java.

Якщо вам потрібна швидка, проста система, і вам потрібно підтримувати кілька мов (я використовую C і .net), то я рекомендую переглянути 0MQ.


Також використання ZMQ в середовищі C / C ++. Дуже швидко. Використання схеми брокера. Добре підходить для нашого реального часу додаток VOIP для сторожових собак, що робить мікро-птс для ферм камаїліо SIP-серверів. Досить впевнений, що я міг написати дуже складного брокера за допомогою ZMQ, але оцінював би деякі додаткові продукти, перш ніж взяти на себе це.

10

Я можу додати лише свої 2 центи про ActiveMQ, але оскільки це один з найпопулярніших:

Мова, якою ви хочете написати, може бути важливою. Хоча для ActiveMQ для більшості є клієнт, їх C # реалізація далеко не завершена порівняно з бібліотекою Java.

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

Потім є сам ActiveMQ, який має багато приємних особливостей, але також виникають і дуже дивні проблеми. Ми використовуємо Fuse (Progress) версію activemq з міркувань стабільності, але навіть тоді є кілька дивних "помилок", про які ви хочете пам’ятати:

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

Все, і все, це дуже приємний продукт, ЯКЩО ви можете жити з його проблемами:

А) не боїтеся активно брати участь у використанні .NET
B) розвиватися в java ;-)


5
Незначне оновлення: з деякого часу KahaDB є зберіганням за умовчанням для ActiveMQ. Однак: він взагалі не стабільний. Під час нашого тестування ми бачили пошкодження бази даних (деякі відновлюються, інші коштують нам приблизно 15
000 000

8

ZeroMQ справді з нульовими чергами! Це дійсно помилка! У ньому немає черг, тем, наполегливості, нічого! Це лише проміжне програмне забезпечення для розеток API. Якщо це те, що ви виглядаєте круто! інакше забудь! це не схоже на activeMQ або rabbitmq.


8

Проведено порівняння особливостей та продуктивності RabbitMQ ActiveMQ та QPID, наведених на веб-сайті
http://bhavin.directi.com/rabbitmq-vs-apache-activemq-vs-apache-qpid/

Особисто я спробував усі вищевказані три. На мене RabbitMQ - найкраща ефективність, але вона не має варіантів відмови та відновлення. ActiveMQ має більшість функцій, але повільніше.

Оновлення: HornetQ - це також варіант, який ви можете розглянути, це скарга на JMS, кращий варіант, ніж ActiveMQ, якщо ви шукаєте рішення, засноване на JMS.


6

Про свій початковий досвід щодо AMQP, Qpid та ZeroMQ я писав тут: http://ron.shoutboot.com/2010/09/25/is-ampq-for-you/

Моя суб'єктивна думка полягає в тому, що AMQP добре, якщо вам справді потрібні постійні засоби обміну повідомленнями і не надто переймається тим, що брокер може бути вузьким місцем. Також клієнт C ++ наразі відсутній для AMQP (Qpid не завоював мою підтримку; проте не впевнений у клієнті ActiveMQ), але, можливо, працює. ZeroMQ може бути інакше.


6

Я використовую ActiveMQ у виробничих умовах вже близько 3 років. Хоча це виконує роботу, вибудовування версій клієнтських бібліотек, які працюють належним чином і не містять помилок, може бути проблемою. Зараз шукали перехід на RabbitMQ.


5

У коментарях до цієї публікації щоденника є певна дискусія про те, як Twitter написав власну чергу повідомлень, що може бути цікавим.

Стів робив великі навантажувальні та стресові тести ActiveMQ, RabbitMQ тощо. ActiveMQ насправді досить повільний (набагато повільніше, ніж Kestrel).

Ви, мабуть, спочатку не матимете завантаження, як Twitter :)


5

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

Налаштування розміру попереднього вибору. Налаштування різьблення. Налаштування відмови. Налаштоване адміністративне повідомлення виробникам. ... подробиці за адресою:

http://activemq.net/blog http://activemq.apache.org


0

Ебі, все зводиться до вашої справи використання. Замість того, щоб покладатися на чужий рахунок свого випадку використання, не соромтеся опублікувати свій випадок використання у списку обговорень rabbitmq. Запит на Twitter ще й отримає відповіді. Найкращі побажання, алексис


0

Про ZeroMQ aka 0MQ, як ви, можливо, вже знаєте, саме те, що отримає вам найбільше повідомлень за секунду (вони були приблизно 4 мільйони в секунду на їх сервері ref, коли я перевіряв останній раз), але, як ви, можливо, вже знаєте, документація не існує. Вам буде важко знайти, як запустити сервер (и), не кажучи вже про те, як ними користуватися. Я думаю, що це частково тому, що ще ніхто не сприяв 0MQ.

Веселіться!


11
У кулінарній книзі zeromq.org/docs:cookbook є приклади, і є посібник api.zeromq.org/zmq.html .
Нік

7
в той час як zmq швидкий і має простий api, пам’ятайте про це: немає наполегливості, немає транзакцій. Відсутність виявлення фальшивих або повільних споживачів (повідомлення просто відкидаються без будь-якого повідомлення виробника програми). Sidenote: zmq без сервера, тому ви не знайдете документів для запуску серверів. У них є проксі-сервер, якщо вам потрібно щось подібне.
нос

0

Якщо ви також зацікавлені в комерційних реалізаціях, варто поглянути на Nirvana з моїх каналів .

Nirvana активно використовується в галузі фінансових послуг для широкомасштабних платформ для торгівлі з низькою затримкою та розподілу цін.

Існує підтримка широкого спектру клієнтських мов програмування на всіх підприємствах, в Інтернеті та мобільних доменах.

Можливості кластеризації надзвичайно вдосконалені і їх варто придивитись, якщо для вас важливі прозорі HA або балансування навантаження.

Nirvana безкоштовно завантажити для цілей розвитку.


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