Подтвердить что ты не робот

Переход от ActiveMQ к RabbitMQ

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

  • Каким образом RabbitMQ отличается от ActiveMQ? Что делает RabbitMQ лучше или хуже, чем ActiveMQ?
  • Сравнительно, насколько легко/сложно настроить RabbitMQ?
  • Насколько хорошо интегрирован RabbitMQ с Spring?
    • С ActiveMQ я просто подключаю соединение factory bean к JmsTemplate, и я использую DefaultMessageListener beans для подключения очередей к их соответствующим обработчикам. Могу ли я по существу сделать то же самое с RabbitMQ?
4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Различные AMMP-системы 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 о том, когда они будут поддерживать его.

Ответ 3

Так как 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).

Ответ 4

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

Я использовал оба и как оба:

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