ActiveMQ или RabbitMQ или ZeroMQ или

Нам было бы интересно узнать о любом опыте с плюсами и минусами ActiveMQ, RabbitMQ и ZeroMQ. Также приветствуется информация о любых других интересных очередях сообщений.


person Abie    schedule 08.04.2009    source источник
comment
Я новичок в очереди сообщений и читал больше о реальном случае ее использования на stackoverflow.com/q/1035949/181870. Позже при поиске тем/статей, связанных с очередью сообщений (в частности, JMS), я наткнулся на OpenJMS — реализация с открытым исходным кодом спецификации Sun Microsystems Java Message Service API 1.1. Что меня удивляет, так это то, что это не рассматривается/обсуждается здесь? Я просто хотел проверить с сообществом, связана ли OpenJMS с этой темой/обсуждением, и если да, то, согласно OP, поможет любой опыт с плюсами и минусами того же самого.   -  person Gnanam    schedule 19.08.2011
comment
3 года спустя, примечание для людей, просматривающих здесь ... подумайте, ПОЧЕМУ вы хотите использовать промежуточное программное обеспечение для очереди сообщений. Если причина в распределении задач внутри кластера, посмотрите на Celery. Он работает на более высоком уровне абстракции, чем решения в стиле MQ, использует RabbitMQ для перемещения сообщений, но имеет выдающуюся поддержку семантики для конкретных задач.   -  person Chris Johnson    schedule 29.08.2013


Ответы (17)


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

Эти 3 технологии обмена сообщениями имеют разные подходы к построению распределенных систем:

RabbitMQ — одна из ведущих реализаций протокола AMQP (наряду с Apache Qpid). Поэтому он реализует архитектуру брокера, что означает, что сообщения ставятся в очередь на центральном узле перед отправкой клиентам. Такой подход делает RabbitMQ очень простым в использовании и развертывании, поскольку расширенные сценарии, такие как маршрутизация, балансировка нагрузки или постоянная организация очередей сообщений, поддерживаются всего несколькими строками кода. Однако это также делает его менее масштабируемым и «медленным», потому что центральный узел увеличивает задержку, а конверты сообщений довольно велики.

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

ActiveMQ занимает промежуточное положение. Как и Zmq, его можно развернуть как с брокерской, так и с P2P-топологией. Как и в случае с RabbitMQ, сложные сценарии реализовать проще, но обычно это происходит за счет снижения производительности. Это швейцарский армейский нож обмена сообщениями :-).

Наконец, все 3 продукта:

  • иметь клиентские API для наиболее распространенных языков (C++, Java, .Net, Python, Php, Ruby, …)
  • иметь сильную документацию
  • активно поддерживаются
person Julien    schedule 06.11.2009
comment
Хотя это правда, я не уверен, что принятие AMQP сильно коррелирует с исходным вопросом. Я думаю, что есть более важные соображения для выбора очереди сообщений, чем то, какой базовый проводной протокол она использует. - person StaxMan; 14.05.2010
comment
В вопросе не упоминается требование AMQP, но этот ответ ориентирован на AMQP. Если бы мы предположили, что JMS является обязательным требованием, ответ был бы в основном обратным: ActiveMQ наиболее популярен, у RabbitMQ есть некоторая поддержка, которая, вероятно, должна работать. Если проводной протокол не предполагается: см. другие ответы. - person Fletch; 02.12.2010
comment
Поработав в RabbitMQ и ActiveMQ, я бы рекомендовал вам держаться подальше от ActiveMQ. Релизы полны ошибок, и у меня не было конца проблемам с зависанием машин, утечками памяти и т. д. RabbitMQ, с другой стороны, просто работает. После того, как я подключил его, мне НИКОГДА не приходилось смотреть на него снова. Он просто делает то, что ему нужно. Если вам нравится, у меня есть простой учебник по RabbitMQ в моем блоге jarloo.com/rabbitmq-c-tutorial - person Kelly; 20.11.2011
comment
После просмотра сообщений о вакансиях для RabbitMQ по сравнению с ActiveMQ, RabbitMQ кажется гораздо более востребованным. ActiveMQ существует дольше, но работодатели запрашивают его почти так же часто. - person ; 13.12.2012
comment
Руководство по ZMQ также действительно забавное и приятное чтение :) - person meawoppl; 17.05.2013
comment
Будучи реализованным с потрясающим Erlang, узел центрального брокера RabbitMQ (который на самом деле является концептуальным) не обязательно размещается на одном узле или сервере erlang, вместо этого может быть кластером распределенных узлов, поддерживаемых (опционально в зависимости от ваших потребностей) балансировщиками нагрузки. . Итак, IMO, проблема масштабируемости с указанным вами брокерским узлом RMQ вводит в заблуждение, и вам следует пересмотреть свой ответ в этой части. Я настоятельно рекомендую не рассматривать RMQ только как часть готового программного обеспечения, а рассматривать его как хорошо написанный набор инструментов, которые можно легко настроить для любых потребностей MQ. - person M N Islam Shihan; 23.02.2014

Почему вы пропустили Sparrow, скворец, пустельга, Amazon SQS, Beanstalkd, Kafka, IronMQ ?

Серверы очереди сообщений

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

Воробей

  • автор Алекс Маккоу
  • Sparrow — это облегченная очередь, написанная на Ruby и «говорящая с memcache».

Скворец

Пустельга

  • автор Роби Пойнтер
  • Клон Starling, написанный на Scala (порт Starling с Ruby на Scala)
  • Очереди хранятся в памяти, но регистрируются на диске

КроликMQ

  • RabbitMQ — это сервер очереди сообщений в Erlang.
  • сохраняет задания в памяти (очередь сообщений)

Апач ActiveMQ

  • ActiveMQ — брокер сообщений с открытым исходным кодом на Java.

Бобовый стебель

Amazon SQS

Кафка

  • Написано в LinkedIn на Scala
  • Используется LinkedIn для разгрузки обработки всех страниц и других просмотров.
  • По умолчанию используется сохраняемость, для горячих данных используется дисковый кеш ОС (имеет более высокую пропускную способность, чем любое из вышеперечисленных устройств с включенной сохраняемостью).
  • Поддерживает как онлайн, так и автономную обработку

ZMQ

  • Библиотека сокетов, которая действует как среда параллелизма.
  • Быстрее, чем TCP, для кластерных продуктов и суперкомпьютеров
  • Переносит сообщения через inproc, IPC, TCP и многоадресную рассылку.
  • Соедините N-to-N через разветвление, pubsub, конвейер, запрос-ответ
  • Асинхронный ввод-вывод для масштабируемых многоядерных приложений для передачи сообщений

ОрелMQ

  • EagleMQ — это высокопроизводительный и легкий менеджер очередей с открытым исходным кодом.
  • Написано на С
  • Хранит все данные в памяти и поддерживает постоянство.
  • У него есть свой протокол. Поддерживает работу с очередями, маршрутами и каналами.

IronMQ

  • IronMQ
  • Написано на Go
  • Полностью управляемая служба очереди
  • Доступен как в облачной, так и в локальной версии

Я надеюсь, что это будет полезно для нас. источник

person Andrei Andrushkevich    schedule 18.03.2011
comment
Есть ли у вас какие-либо идеи/мысли добавить/прокомментировать мой вопрос, заданный в области комментариев этого вопроса здесь - stackoverflow.com/questions/731233/? - person Gnanam; 22.08.2011
comment
Есть ли у них управление конфликтами? Я всегда находил эту проблему с системами очередей. Например, блокировка производителя, если очередь заполнена на основе количества элементов (а не ресурсов памяти). - person sw.; 10.12.2011
comment
queues.io — Не забудьте добавить детали, отсутствующие там и здесь. - person asyncwait; 24.12.2013

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

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


ОБНОВИТЬ

Просто уточняю то, что Пол добавил в комментарии. Упомянутая выше страница мертва после 2010 года, так что читайте ее с долей скептицизма. Много чего поменяно за 3 года.

История вики-страницы

person FlySwat    schedule 08.04.2009
comment
Я думаю, что эти ребята неправильно думают об очередях - очереди не должны быть 1 (или более) на пользователя. Они должны поставить свою работу в несколько очередей, а затем использовать. входящие (или mboxes) для каждого пользователя. - person Michael Deardeuff; 27.04.2010
comment
Михаил, хотите подробнее? Проблема заключается в доставке в режиме реального времени в системе, основанной на групповом чате. Если я правильно понимаю, вы говорите о надежном механизме хранения сообщений в качестве конечной точки (входящие)? Если да, то это не подходит, они хотят, чтобы чат доставлялся сразу, а клиенты были прямыми подписчиками? Насколько я могу судить, наличие множества очередей на основе тем не является оптимизированным вариантом использования? - person Josh; 17.10.2010
comment
Обновление: эта вики-страница SecondLife была написана в 2009 году. К настоящему времени, в 2013 году, многие из конкретных моментов, упомянутых в отношении различных исследованных ими очередей сообщений, больше не актуальны из-за постоянных улучшений во всех MQ. Большинство или все MQ, которые они тестировали, к настоящему времени в некотором смысле лучше. - person Paul Legato; 15.02.2013

Это действительно зависит от вашего варианта использования.

Сравнивать 0MQ с ActiveMQ или RabbitMQ некорректно. ActiveMQ и RabbitMQ — это системы обмена сообщениями, которые требуют установки и администрирования. Они предлагают гораздо больше функций, чем ZeroMQ. У них есть настоящие постоянные очереди, поддержка транзакций и т. д.

ZeroMQ — это облегченная реализация сокета, ориентированная на сообщения. Он также подходит для внутрипроцессного асинхронного программирования. Можно запустить «Корпоративную систему обмена сообщениями» поверх ZeroMQ, но вам придется многое реализовать самостоятельно.

So:

ActiveMQ, RabbitMQ, Websphere MQ и MSMQ — это «Очереди корпоративных сообщений».

ZeroMQ — это библиотека IPC, ориентированная на сообщения.

person sanosdole    schedule 02.02.2011
comment
Вы можете использовать более одного. rabbitmq.com/blog/2010/10/18/rabbitmq0mq-bridge рассказывает о том, как можно использовать 0MQ для соединения нескольких брокеров RabbitMQ и создания слабосвязанной федерации. - person Michael Dillon; 07.05.2011

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

Еще одним плюсом ActiveMQ является то, что это проект Apache, поэтому в сообществе разработчиков есть разнообразие, и оно не привязано к одной компании.

person Rob Davies    schedule 20.10.2009

Я не использовал 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/)

person Bob Scott    schedule 24.08.2010

Я использую ZeroMQ. Я хотел простую систему передачи сообщений, и мне не нужно усложнение брокера. Мне также не нужна огромная корпоративная система, ориентированная на Java.

Если вам нужна быстрая и простая система, и вам нужна поддержка нескольких языков (я использую C и .net), я бы порекомендовал обратить внимание на 0MQ.

person Nick    schedule 28.07.2010
comment
Также используется ZMQ в среде C/C++. Очень быстро. Использование шаблона брокера. Хорошо подходит для нашего приложения для наблюдения за VOIP в режиме реального времени, выполняющего микро-PMTS для ферм SIP-серверов kamailio. Почти уверен, что я мог бы написать очень сложного брокера с использованием ZMQ, но прежде чем приступить к этому, я бы оценил некоторые дополнительные продукты. - person ; 07.11.2013

Я могу только добавить свои 2 цента по поводу ActiveMQ, но так как это один из самых популярных:

Язык, на котором вы хотите писать, может быть важен. Хотя у ActiveMQ есть клиент для большинства, их реализация на C# далека от завершения по сравнению с библиотекой Java.

Это означает, что некоторые базовые функции ненадежны (протокол аварийного переключения, который... ну... в некоторых случаях дает сбой, отсутствие поддержки повторной доставки), а других просто нет. Поскольку .NET, похоже, не так уж важен для проекта, разработка идет довольно медленно, и, похоже, нет никакого плана выпуска. Ствол часто ломается, поэтому, если вы думаете об этом, вы можете подумать о том, чтобы внести свой вклад в проект, если хотите, чтобы дела шли вперед.

Кроме того, есть сам ActiveMQ, у которого есть много хороших функций, но есть и очень странные проблемы. Мы используем версию activemq Fuse (Progress) из соображений стабильности, но даже в этом случае есть пара странных «ошибок», о которых следует помнить:

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

В общем, это довольно хороший продукт, ЕСЛИ вы можете жить с его проблемами:

А) не боятся активно включаться при использовании .NET
Б) разрабатывать на java ;-)

person Noctris    schedule 29.10.2009
comment
Незначительное обновление: некоторое время KahaDB является хранилищем постоянства по умолчанию для ActiveMQ. Однако: он совсем не стабилен. В нашем тестировании мы видели повреждения базы данных (некоторые из них можно восстановить, другие стоили нам примерно 15 000 000 сообщений). ОСТЕРЕГАЙТЕСЬ ЭТОГО - person Noctris; 04.04.2011

ZeroMQ действительно без очередей! Это действительно ошибка! В нем нет очередей, тем, настойчивости, ничего! Это всего лишь промежуточное ПО для API сокетов. Если это то, что вы ищете круто! иначе забудь! это не похоже на activeMQ или rabbitmq.

person Angek    schedule 19.08.2010

Сравнение функций и производительности RabbitMQ ActiveMQ и QPID приведено по адресу
http://bhavin.directi.com/rabbitmq-vs-apache-activemq-vs-apache-qpid/

Лично я пробовал все три вышеперечисленных. По моему мнению, RabbitMQ является лучшим с точки зрения производительности, но у него нет вариантов аварийного переключения и восстановления. ActiveMQ имеет больше возможностей, но работает медленнее.

Обновление: HornetQ также является вариантом, на который вы можете обратить внимание, это жалоба JMS, лучший вариант, чем ActiveMQ если вы ищете решение на основе JMS.

person sheki    schedule 23.08.2010

Я написал о своем первом опыте использования AMQP, Qpid и ZeroMQ здесь: http://ron.shoutboot.com/2010/09/25/is-ampq-for-you/

Мое субъективное мнение состоит в том, что AMQP хорош, если вам действительно нужны средства постоянного обмена сообщениями и вы не слишком обеспокоены тем, что брокер может стать узким местом. Кроме того, клиент C++ в настоящее время отсутствует для AMQP (Qpid не получил моей поддержки, однако не уверен в клиенте ActiveMQ), но, возможно, работа продолжается. ZeroMQ может быть иным.

person ron    schedule 25.09.2010

Я использую ActiveMQ в производственной среде уже около 3 лет. Несмотря на то, что он выполняет свою работу, согласование версий клиентских библиотек, которые работают правильно и не содержат ошибок, может быть проблемой. В настоящее время мы собираемся перейти на RabbitMQ.

person Kelly    schedule 14.05.2011

В комментариях к этой записи в блоге есть некоторые обсуждения, о том, что Twitter пишет собственную очередь сообщений, что может быть интересно.

Стив провел обширное нагрузочное и стресс-тестирование ActiveMQ, RabbitMQ и т. д. ActiveMQ на самом деле довольно медленный (намного медленнее, чем Kestrel), RabbitMQ постоянно дает сбой при слишком большом количестве производителей и слишком малом количестве потребителей.

Однако изначально у вас, вероятно, не будет нагрузки, похожей на Twitter :)

person crb    schedule 08.04.2009

Немногие приложения имеют столько настраиваемых конфигураций, сколько ActiveMQ. Некоторые особенности, которые выделяют ActiveMQ:

Настраиваемый размер предварительной выборки. Настраиваемая многопоточность. Настраиваемый отказоустойчивый режим. Настраиваемое административное уведомление производителей. ... подробности по адресу:

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

person cobrien    schedule 20.07.2010

Если вас также интересуют коммерческие реализации, обратите внимание на Nirvana на моих каналах.

Nirvana широко используется в индустрии финансовых услуг для крупномасштабной торговли с малой задержкой и платформ распределения цен.

Существует поддержка широкого спектра клиентских языков программирования в корпоративных, веб- и мобильных доменах.

Возможности кластеризации чрезвычайно продвинуты, и на них стоит обратить внимание, если для вас важна прозрачная доступность или балансировка нагрузки.

Nirvana можно загрузить бесплатно для целей разработки.

person eddie mcdaid    schedule 28.07.2010
comment
Здесь должно было быть предупреждение о том, что это повышение от сотрудника my-channels. - person ; 29.12.2013

Эйби, все зависит от твоего варианта использования. Вместо того, чтобы полагаться на чью-то учетную запись их варианта использования, не стесняйтесь опубликовать свой вариант использования в списке rabbitmq-discuss. Спросив в твиттере, вы тоже получите ответы. С наилучшими пожеланиями, Алексей

person Community    schedule 18.05.2009

Что касается ZeroMQ, также известного как 0MQ, как вы, возможно, уже знаете, это тот, который будет приносить вам наибольшее количество сообщений в секунду (в последний раз, когда я проверял, их было около 4 миллионов в секунду на их ref-сервере), но, как вы, возможно, уже знаете, документация отсутствует. Вам будет трудно найти, как запустить сервер(ы), не говоря уже о том, как их использовать. Я предполагаю, что отчасти поэтому никто еще не сообщил о 0MQ.

Развлекайся!

person Charle    schedule 15.05.2010
comment
Примеры есть в кулинарной книге zeromq.org/docs:cookbook, а также есть руководство api.zeromq.org/zmq.html. - person Nick; 28.07.2010
comment
в то время как zmq быстр и имеет простой API, имейте в виду: нет постоянства, нет транзакций. Нет обнаружения ошибочных или медленных потребителей (сообщения просто удаляются без какого-либо уведомления программы-производителя). Примечание: zmq не имеет серверов, поэтому вы не найдете документации по запуску серверов. У них есть прокси-сервер, если вам нужно что-то подобное. - person nos; 28.07.2010