Преминаване от ActiveMQ към RabbitMQ

В момента използвам ActiveMQ за нуждите си от съобщения; с изключение на няколко грешки в db, той работи добре. Въпреки това, най-малкото обмислям да изпробвам 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. Предлагам ви да прочетете статията в wikipedia за AMQP, за да добиете представа за концепциите, използвани в AMQP, които са различни от тези, които познавате в JMS. Една от основните разлики е, че в AMQP производителят изпраща до обмен, без да знае действителната стратегия за разпространение на съобщенията, докато в JMS производителят се насочва или към опашка, или към тема (като по този начин е наясно с типа маршрутизиране на съобщението на място). Така че е трудно да се каже кое е направено по-добре или по-лошо, тъй като семантиката е много различна между JMS и AMQP.

  2. Всички опашки и обмен на RabbitMQ са конфигурирани чрез AMQP протокола, така че клиентската библиотека ви позволява да конфигурирате всичките си дестинации и тяхното поведение. ActiveMQ изисква специфична конфигурация на местоназначението, тъй като спецификацията на JMS не покрива никоя от административната страна на нещата. Освен това системната конфигурация на RabbitMQ е Erlang-esque, докато ActiveMQ обикновено се конфигурира в XML. Така че ще трябва да свикнете с прекрасния синтаксис {tuple} и ‹>. RabbitMQ обикновено се инсталира с OS пакети, докато ActiveMQ дистрибуциите са архиви, които пускате навсякъде (или Maven deps, които вграждате в нещо друго).

  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 -цялостно наблюдение и scoutapp.com/plugin_urls/311-rabbitmq-queue -мониторинг). - person David Dossot; 16.08.2011

AMQP е стандарт на ниво приложение за Message Oriented Middleware (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, което е ужасно остаряло. Ще направите много по-добре, ако вземете .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 брокера, разбира се).

person Michael Dillon    schedule 16.08.2011

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

Използвал съм и двете и харесвам и двете:

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