Переход с ActiveMQ на RabbitMQ

В настоящее время я использую ActiveMQ для обмена сообщениями; за исключением нескольких сбоев БД, он работал хорошо. Однако я, по крайней мере, подумываю о том, чтобы попробовать RabbitMQ. Но прежде, чем я это сделаю, я хотел бы понять следующее:

  1. Чем RabbitMQ отличается от ActiveMQ? Что RabbitMQ лучше или хуже ActiveMQ?
  2. Насколько легко / сложно настроить RabbitMQ для сравнения?
  3. How well integrated is RabbitMQ with Spring?
    • With ActiveMQ, I simply wire a connection factory bean into a JmsTemplate and I use DefaultMessageListener beans to connect queues to their respective handlers. Can I essentially do the same with RabbitMQ?

person sjac    schedule 12.08.2011    source источник
comment
Исправление / обновление: activemq.apache.org/amqp.html теперь говорит об AMQP 1.0: доступно начиная с версии ActiveMQ 5.8 и выше   -  person Aim    schedule 23.04.2014


Ответы (4)


  1. RabbitMQ - это брокер AMQP, а ActiveMQ - брокер JMS. Я предлагаю вам прочитать статью в википедии AMQP, чтобы получить представление о концепциях, используемых в AMQP, а именно: отличается от тех, которые вам знакомы по JMS. Одно из основных различий заключается в том, что в AMQP производитель отправляет на обмен, не зная фактической стратегии распространения сообщений, в то время как в JMS производитель нацелен либо на очередь, либо на тему (таким образом, зная о типе маршрутизации сообщений). Так что трудно сказать, что сделано лучше или хуже, поскольку семантика JMS и AMQP сильно различается.

  2. Очереди и обмены RabbitMQ настраиваются через протокол AMQP, поэтому клиентская библиотека позволяет вам настраивать все ваши пункты назначения и их поведение. ActiveMQ требует особой конфигурации места назначения, потому что спецификация JMS не охватывает ни одну из сторон администрирования. Кроме того, конфигурация системы RabbitMQ является эрланговой, а ActiveMQ обычно настраивается в XML. Так что вам придется привыкнуть к прекрасному синтаксису {tuple} и ‹>. RabbitMQ обычно устанавливается вместе с пакетами ОС, в то время как дистрибутивы ActiveMQ представляют собой архивы, которые вы размещаете куда угодно (или Maven, которые вы встраиваете во что-то еще).

  3. Очень хорошо :) См. Spring AMQP.

person David Dossot    schedule 12.08.2011
comment
Спасибо за полезные ответы. В качестве продолжения, есть ли у RabbitMQ консоль администратора / мониторинга (веб-интерфейс или нет)? - person sjac; 15.08.2011
comment
Оказывается, для RabbitMQ доступно довольно много консолей управления / мониторинга (см. здесь) . Какой из всех вариантов вы порекомендуете? - person sjac; 15.08.2011
comment
Я использовал Alice / Wonderland, пока не появилась официальная консоль управления (rabbitmq.com/management.html) out, который я сейчас использовал по умолчанию. Мониторинг зависит от вашего инструментария: плагин SNMP отлично работает с Zabbix. Я также недавно успешно использовал плагины Scout (scoutapp.com/plugin_urls/301-rabbitmq -overall-monitoring и scoutapp.com/plugin_urls/311-rabbitmq-queue -мониторинг). - person David Dossot; 16.08.2011

AMQP - это стандарт уровня приложения для ориентированного на сообщения промежуточного программного обеспечения (MOM). JMS - это стандартный API для Java для связи с MOM.

Два разных приложения Java, использующих JMS, могут использовать разные MOM и, следовательно, по-прежнему не могут взаимодействовать. ActiveMQ - это система MOM с библиотекой JMS, которая позволяет программам Java обращаться к ней с помощью JMS, но она не обязательно может взаимодействовать с другой программой JMS Java, используя, скажем, WebLogic MOM.

Различные системы AMQP MOM могут взаимодействовать друг с другом (при условии, что они используют одну и ту же версию AMQP), поскольку AMQP является стандартом в том же направлении, что и, скажем, SMTP. Нет причин, по которым система AMQP MOM не могла также предоставить библиотеку JMS для своих клиентов Java. SwiftMQ, например, предоставляет JMS API и использует AMQP 1.0.

К сожалению, не все системы AMQP (а их много) еще используют версию 1.0 AMQP. RabbitMQ (на момент написания) еще не поддерживает AMQP 1.0. Некоторые из других систем AMQP - это Apache QPID и StormMQ, но есть и многие другие. Как только все они будут поддерживать AMQP 1.0, все они должны взаимодействовать друг с другом.

На своем сайте http://activemq.apache.org/amqp.html ActiveMQ сообщает: «Мы ожидаем, что ActiveMQ будет реализовать последнюю версию, как только она будет завершена. Но в настоящее время ActiveMQ не реализует AMQP ». Теперь, когда вышел AMQP 1.0, от ActiveMQ больше ничего не известно о том, когда они его поддержат.

person JavaGP    schedule 08.11.2012

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

Одна из сложных проблем RabbitMQ заключается в том, что многие пакеты ОС имеют версию 1.72, что ужасно устарело. Вам было бы гораздо лучше получить пакет RabbitMQ 2.51 .deb или .rpm прямо с их сайта. После этого единственная конфигурация, которую вам действительно нужно сделать за пределами AMQP, - это создать vhosts и разрешения пользователей с помощью rabbitmqctl. Или вы можете загрузить плагины .ez для веб-консоли управления и поместить их в правильный каталог перед перезапуском RabbitMQ. Эта веб-консоль управления настоятельно рекомендуется, если вы используете 2.51, но это невозможно, если вы застряли с 1.72 по умолчанию, с которым вас оседлают Debian и Ubuntu.

После запуска RabbitMQ вы можете использовать любой язык и любую библиотеку AMQP. Я лично взял на себя систему Python с использованием pika, amqplib и kombu. Теперь я использую haigha и библиотеку Java из Scala, все они общаются друг с другом через AMQP (и, конечно же, через брокер MQ).

person Michael Dillon    schedule 16.08.2011

Сравнение концепций JMS / AMQP для сравнения ActiveMQ и RabbitMQ - не самое важное: ActiveMQ использует AMQP, а в коммерческой версии есть клиент JMS для RabbitMQ (назывался vFabric RabbitMQ). Тем не менее, некоторые концепции AMQP (ключи маршрутизации) могут быть полезны в некоторых случаях использования.

Я использовал оба, и мне нравятся оба:

  • Установлено, что Erlang + RabbitMQ сложнее установить в некоторых системах (устаревшие репозитории пакетов), чем Java + ActiveMQ
  • RabbitMQ имеет несколько хороших параметров кластеризации / высокой доступности (зеркальные очереди, федерация кластеров). Нет необходимости в общем ZooKeeper или общей базе данных, но следует позаботиться о проблеме «разделения мозга».
  • ActiveMQ тяжелее (потребление памяти)
  • ActiveMQ отлично интегрирован с Apache Camel, с RabbitMQ лучше использовать Spring Integration (Camel RabbitMQ / AMQP немного грубоват)
  • ActiveMQ поддерживает транзакции XA, может быть встроен в приложения Java, может быть встроен в Camel.
  • Автоматическое тестирование Java с помощью ActiveMQ проще (встроенный брокер)
person G Quintana    schedule 23.04.2014