Переключение с ActiveMQ на RabbitMQ - PullRequest
50 голосов
/ 12 августа 2011

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

  1. Чем RabbitMQ отличается от ActiveMQ?Что RabbitMQ делает лучше или хуже ActiveMQ?
  2. Для сравнения, насколько легко / сложно настроить RabbitMQ?
  3. Насколько хорошо RabbitMQ интегрирован с Spring?
    • С ActiveMQ я просто подключаю bean-компонент фабрики соединений к JmsTemplate и использую bean-компоненты DefaultMessageListener для соединения очередей с их соответствующими обработчиками.Могу ли я сделать то же самое с RabbitMQ?

Ответы [ 4 ]

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

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

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

8 голосов
/ 08 ноября 2012

AMQP - это стандарт уровня приложения для Message Oriented Middleware (MOM). JMS - это стандартный API для Java для связи с MOM.

Два разных Java-приложения, использующих JMS, могут использовать разные MOM и, следовательно, по-прежнему не могут общаться. ActiveMQ - это система MOM с библиотекой JMS, которая позволяет программам Java получать к ней доступ через JMS, но она не обязательно может взаимодействовать с другой программой Java JMS с помощью, скажем, 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 больше нет сведений о том, когда они его поддержат.

6 голосов
/ 16 августа 2011

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

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

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

3 голосов
/ 23 апреля 2014

Сравнение концепций 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 стало проще (встроенный брокер)
...