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

645

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

Abie
источник
2
Я новичок в очереди сообщений и читал больше о реальном случае использования на stackoverflow.com/q/1035949/181870 . Позже, занимаясь поиском тем / статей, связанных с очередью сообщений (в частности, JMS), я наткнулся на OpenJMS - реализацию с открытым исходным кодом спецификации Java Message Service API 1.1 от Sun Microsystems. Что меня удивляет, так это то, что здесь не обсуждается / не обсуждается? Я просто хотел уточнить у сообщества, связана ли OpenJMS с этой темой / обсуждением, и если да, то, согласно OP, любой опыт с за и против этого поможет.
Гнанам
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 продукта:

  • иметь клиентские API для наиболее распространенных языков (C ++, Java, .Net, Python, Php, Ruby,…)
  • иметь сильную документацию
  • активно поддерживаются
Julien
источник
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

Почему вы пропустите Воробей , Старлинг , пустельга , Amazon SQS , Beanstalkd , Кафку , IronMQ ?

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

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

Воробей

  • написанный Алексом Маккоу
  • Воробей - это легкая очередь, написанная на Ruby, которая «говорит на memcache»

Скворец

Пустельга

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

RabbitMQ

  • RabbitMQ - сервер очереди сообщений в Эрланге
  • сохраняет задания в памяти (очередь сообщений)

Apache ActiveMQ

  • ActiveMQ - брокер сообщений с открытым исходным кодом в Java

Beanstalkd

Amazon SQS

Кафка

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

ZMQ

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

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 года.

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

FlySwat
источник
7
Я думаю, что эти парни думают об очередях неправильно - очередей не должно быть 1 (или более) на пользователя. Они должны поставить свою работу в несколько очередей и затем использовать их. Входящие (или mbox) для каждого пользователя.
Майкл Дирдеуфф
1
Майкл - хочешь уточнить немного больше? Проблема заключается в доставке в режиме реального времени в системе группового чата. Если я правильно понимаю, вы говорите о механизме длительного хранения сообщений в качестве конечной точки (входящие)? Если так, то это не отвечает требованиям, они хотят, чтобы чат был доставлен немедленно, а клиенты были прямыми подписчиками? Насколько я могу судить, наличие множества тематических очередей не является оптимизированным вариантом использования?
Джош
1
Обновление: Эта вики-страница SecondLife была написана в 2009 году. К настоящему времени, в 2013 году, многие из упомянутых выше конкретных точек зрения относительно различных очередей сообщений, которые они исследовали, более не актуальны из-за постоянных улучшений во всех MQ. Большинство или все тестируемые ими MQ лучше, в некотором смысле, к настоящему времени.
Пол Легато
71

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

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

ZeroMQ - это легкая реализация сокетов, ориентированная на сообщения. Это также подходит для внутрипроцессного асинхронного программирования. Можно запустить «Enterprise Messaging System» поверх ZeroMQ, но вам придется многое реализовать самостоятельно.

Так:

ActiveMQ, RabbitMQ, Websphere MQ и MSMQ - это «очереди сообщений предприятия»

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

sanosdole
источник
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-серверов kamailio. Я уверен, что мог бы написать очень сложного брокера, используя ZMQ, но перед тем, как сделать это, оценим некоторые дополнительные продукты.
10

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

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

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

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

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

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

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

Noctris
источник
5
Незначительное обновление: с тех пор KahaDB является постоянным хранилищем по умолчанию для ActiveMQ. Однако: это не является стабильным на всех. В нашем тестировании мы увидели повреждения базы данных (некоторые восстанавливаемые, другие стоили нам примерно 15 000 000 сообщений). ВНИМАНИЕ ЭТОГО
Noctris
8

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

Angek
источник
8

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

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

Обновление: HornetQ - это также вариант, который вы можете посмотреть, это JMS Complaint, лучший вариант, чем 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

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

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

Впрочем, поначалу у вас не будет загрузки в стиле Twitter :)

CRB
источник
5

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

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

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

cobrien
источник
0

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


источник
0

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

Радоваться, веселиться!

Charle
источник
11
Есть примеры в кулинарной книге zeromq.org/docs:cookbook и есть руководство api.zeromq.org/zmq.html .
Ник
7
В то время как zmq работает быстро и имеет легкий API, имейте в виду следующее: нет настойчивости, нет транзакций. Не обнаруживает ложных или медленных потребителей (сообщения просто удаляются без какого-либо уведомления программе-производителю). Sidenote: zmq не имеет сервера, поэтому вы не найдете документов для запуска серверов. У них действительно есть прокси-сервер, если вам нужно что-то подобное.
NOS
0

Если вы также заинтересованы в коммерческих реализациях, вам стоит взглянуть на Nirvana из my-channel .

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

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

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

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

Эдди МакДейд
источник
2
Это должно было иметь оговорку, что это повышение от сотрудника my-channel.
барон Шварц