ActiveMQ o RabbitMQ o ZeroMQ o [cerrado]

645

Nos interesaría escuchar cualquier experiencia con los pros y los contras de ActiveMQ vs RabbitMQ vs ZeroMQ. La información sobre cualquier otra cola de mensajes interesante también es bienvenida.

Abie
fuente
2
Soy nuevo en la cola de mensajes y estaba leyendo más sobre el caso de uso real en stackoverflow.com/q/1035949/181870 . Más tarde, mientras busqué en Google temas / artículos relacionados con la cola de mensajes (JMS en particular), me encontré con OpenJMS , una implementación de código abierto de la especificación API 1.1 de Java Message Service de Sun Microsystems. Lo que me sorprende es que no está cubierto / discutido aquí. Solo quería verificar con la comunidad si OpenJMS está relacionado con este tema / discusión y, de ser así, según OP, cualquier experiencia con los pros y los contras de la misma sería útil.
Gnanam
3
3 años después, una nota para las personas que navegan por aquí ... piense en POR QUÉ quiere usar el middleware de colas de mensajes. Si la razón es distribuir tareas dentro de un clúster, mire Apio. Opera a un nivel de abstracción más alto que las soluciones de estilo MQ, utiliza RabbitMQ para mover mensajes, pero tiene un soporte excepcional para la semántica específica de la tarea.
Chris Johnson

Respuestas:

342

Editar: Mi respuesta inicial tenía un fuerte enfoque en AMQP. Decidí reescribirlo para ofrecer una visión más amplia sobre el tema.

Estas 3 tecnologías de mensajería tienen enfoques diferentes para construir sistemas distribuidos:

RabbitMQ es una de las principales implementaciones del protocolo AMQP (junto con Apache Qpid). Por lo tanto, implementa una arquitectura de intermediario, lo que significa que los mensajes se ponen en cola en un nodo central antes de enviarse a los clientes. Este enfoque hace que RabbitMQ sea muy fácil de usar e implementar, porque los escenarios avanzados como enrutamiento, equilibrio de carga o colas de mensajes persistentes son compatibles con solo unas pocas líneas de código. Sin embargo, también lo hace menos escalable y "más lento" porque el nodo central agrega latencia y los sobres de mensajes son bastante grandes.

ZeroMq es un sistema de mensajería muy liviano especialmente diseñado para escenarios de alto rendimiento / baja latencia como el que puede encontrar en el mundo financiero. Zmq admite muchos escenarios de mensajería avanzada, pero a diferencia de RabbitMQ, tendrá que implementar la mayoría de ellos usted mismo combinando varias piezas del marco (por ejemplo: sockets y dispositivos). Zmq es muy flexible, pero tendrá que estudiar las 80 páginas más o menos de la guía (que recomiendo leer para cualquiera que escriba un sistema distribuido, incluso si no usa Zmq) antes de poder hacer algo más complicado que enviar mensajes Entre 2 pares.

ActiveMQ está en el término medio. Al igual que Zmq, se puede implementar con topologías de broker y P2P. Al igual que RabbitMQ, es más fácil implementar escenarios avanzados, pero generalmente a costa del rendimiento bruto. Es la navaja suiza de mensajería :-).

Finalmente, los 3 productos:

  • tener API de cliente para los lenguajes más comunes (C ++, Java, .Net, Python, Php, Ruby, ...)
  • tener documentación fuerte
  • son apoyados activamente
Julien
fuente
22
Si bien es cierto, no estoy seguro de si la adopción de AMQP tiene una fuerte correlación con la pregunta original. Creo que hay consideraciones más importantes para la elección de una cola de mensajes que el protocolo de cable subyacente que utiliza.
StaxMan
8
La pregunta no menciona la necesidad de AMQP, pero esta respuesta se centra en AMQP. Si asumiéramos JMS como un requisito, la respuesta sería básicamente la inversa: ActiveMQ es el más popular, RabbitMQ tiene algún soporte que probablemente debería funcionar. Si no se supone un protocolo de conexión: vea otras respuestas.
Fletch
19
Después de haber trabajado en RabbitMQ y ActiveMQ, le recomendaría que se mantenga alejado de ActiveMQ. Los lanzamientos son muy defectuosos, y no tuve problemas con las máquinas que no funcionaban y las pérdidas de memoria, etc. Por otro lado, RabbitMQ simplemente funciona. Después de enchufarlo, NUNCA tuve que volver a mirarlo. Simplemente hace lo que necesita. Si lo desea, tengo un sencillo tutorial de RabbitMQ en mi blog jarloo.com/rabbitmq-c-tutorial
Kelly
2
Después de mirar las publicaciones de trabajo para RabbitMQ versus ActiveMQ, RabbitMQ parece tener mucha más demanda. ActiveMQ ha existido por más tiempo, pero los empleadores lo solicitan casi tanto.
1
La guía para ZMQ también es realmente una lectura divertida y buena :)
meawoppl
174

¿Por qué extrañaste Sparrow , Starling , Kestrel , Amazon SQS , Beanstalkd , Kafka , IronMQ ?

Servidores de cola de mensajes

Los servidores de cola de mensajes están disponibles en varios idiomas, Erlang (RabbitMQ), C (beanstalkd), Ruby (Starling o Sparrow), Scala (Kestrel, Kafka) o Java (ActiveMQ). Una breve descripción se puede encontrar aquí

Gorrión

  • escrito por Alex MacCaw
  • Sparrow es una cola ligera escrita en Ruby que "habla memcache"

Estornino

Cernícalo

  • escrito por Robey Pointer
  • Clon de Starling escrito en Scala (un puerto de Starling de Ruby a Scala)
  • Las colas se almacenan en la memoria, pero se registran en el disco

RabbitMQ

  • RabbitMQ es un servidor de cola de mensajes en Erlang
  • almacena trabajos en la memoria (cola de mensajes)

Apache ActiveMQ

  • ActiveMQ es un agente de mensajes de código abierto en Java

Beanstalkd

Amazon SQS

Kafka

  • Escrito en LinkedIn en Scala
  • Utilizado por LinkedIn para descargar el procesamiento de todas las páginas y otras vistas
  • El uso predeterminado de la persistencia utiliza caché de disco del sistema operativo para datos activos (tiene un rendimiento más alto que cualquiera de los anteriores con persistencia habilitada)
  • Admite procesamiento tanto en línea como fuera de línea

ZMQ

  • La biblioteca de sockets que actúa como un marco de concurrencia
  • Más rápido que TCP, para productos en clúster y supercomputación
  • Transporta mensajes a través de inproc, IPC, TCP y multidifusión
  • Conecte N-to-N a través de fanout, pubsub, pipeline, request-reply
  • Asynch I / O para aplicaciones escalables de transmisión de mensajes multinúcleo

EagleMQ

  • EagleMQ es un gestor de colas de código abierto, alto rendimiento y ligero.
  • Escrito en C
  • Almacena todos los datos en la memoria y admite la persistencia.
  • Tiene su propio protocolo. Admite el trabajo con colas, rutas y canales.

IronMQ

  • IronMQ
  • Escrito en Go
  • Servicio de colas totalmente gestionado
  • Disponible tanto en versión en la nube como en las instalaciones

Espero que esto sea útil para nosotros. fuente

Andrei Andrushkevich
fuente
¿Tiene alguna idea / idea para agregar / comentar para mi pregunta formulada en el área de comentarios de esta pregunta aquí - stackoverflow.com/questions/731233/… ?
Gnanam
¿Tienen gestión de contención? Siempre encontré este problema con los sistemas de colas. Por ejemplo, bloquear a un productor si la cola está llena en función del número de elementos (no en los recursos de memoria).
sw.
1
queues.io : importa agregar detalles que faltan allí vs. aquí.
asyncwait
83

Más información de la que quisiera saber:

http://wiki.secondlife.com/wiki/Message_Queue_Evaluation_Notes


ACTUALIZAR

Simplemente elaborando lo que Paul agregó en el comentario. La página mencionada anteriormente está muerta después de 2010, así que lea con una pizca de sal. Se han cambiado muchas cosas en 3 años.

Historia de la página Wiki

FlySwat
fuente
77
Creo que estos tipos piensan mal en las colas: las colas no deberían ser 1 (o más) por usuario. Deberían poner su trabajo en algunas colas y luego utilizarlo. bandejas de entrada (o mboxes) para cada usuario.
Michael Deardeuff
1
Michael: ¿quieres elaborar un poco más? El problema es la entrega en tiempo real en un sistema basado en chat grupal. Si lo entiendo correctamente, ¿estás hablando de un mecanismo de almacenamiento duradero para mensajes como punto final (bandeja de entrada)? Si es así, entonces no se ajusta a la factura, ¿quieren que el chat se entregue de inmediato y que los clientes sean suscriptores directos? Por lo que puedo decir, tener un montón de colas basadas en temas no es un caso de uso optimizado.
Josh
1
Actualización: esa página wiki de SecondLife fue escrita en 2009. En este momento, en 2013, muchos de los puntos específicos mencionados sobre las diferentes colas de mensajes que investigaron ya no son actuales, debido a las mejoras continuas en todos los MQ. La mayoría o la totalidad de los MQ que probaron son mejores, en cierto sentido, por ahora.
Paul Legato
71

Realmente depende de su caso de uso.

Comparar 0MQ con ActiveMQ o RabbitMQ no es justo. ActiveMQ y RabbitMQ son sistemas de mensajería que requieren instalación y administración. Ofrecen además mucho más que ZeroMQ. Tienen colas persistentes reales, soporte para transacciones, etc.

ZeroMQ es una implementación de socket orientada a mensajes livianos. También es adecuado para la programación asincrónica en proceso. Es posible ejecutar un "Sistema de mensajería empresarial" sobre ZeroMQ, pero tendría que implementar mucho por su cuenta.

Entonces:

ActiveMQ, RabbitMQ, Websphere MQ y MSMQ son "colas de mensajes empresariales"

ZeroMQ es una biblioteca de IPC orientada a mensajes.

sanosdole
fuente
77
Puedes usar más de uno. rabbitmq.com/blog/2010/10/18/rabbitmq0mq-bridge habla sobre cómo puede usar 0MQ para conectar entre varios corredores RabbitMQ y crear una federación débilmente acoplada.
Michael Dillon
34

Hay una comparación entre RabbitMQ y ActiveMQ aquí . Fuera de la caja, ActiveMQ está configurado para garantizar la entrega de mensajes, lo que puede dar la impresión de ser lento en comparación con los sistemas de mensajería menos confiables. Siempre puede cambiar la configuración del rendimiento si lo desea y obtener al menos el mismo rendimiento que cualquier otro sistema de mensajería. Al menos tienes esa opción. Hay mucha información en los foros y en las preguntas frecuentes de ActiveMQ para la configuración de escalado, rendimiento y alta disponibilidad. Además, ActiveMQ admitirá AMQP 1.0 cuando se finalice la especificación, junto con otros formatos de cable, como STOMP.

Otra ventaja para ActiveMQ es su proyecto Apache, por lo que hay diversidad en la comunidad de desarrolladores, y no está vinculada a una sola compañía.

Rob Davies
fuente
22

No he usado ActiveMQ o RabbitMQ pero he usado ZeroMQ. La gran diferencia, según lo veo, entre ZeroMQ y ActiveMQ, etc. es que 0MQ no tiene intermediario y no tiene una confiabilidad integrada para la entrega de mensajes. Si está buscando una API de mensajería fácil de usar que admita muchos patrones de mensajería, transportes, plataformas y enlaces de idiomas, definitivamente vale la pena echar un vistazo a 0MQ. Si está buscando una plataforma de mensajería completa, entonces 0MQ puede no cumplir con los requisitos.

Consulte www.zeromq.org/docs:cookbook para ver muchos ejemplos de cómo se puede usar 0MQ.

Utilicé con éxito 0MQ para pasar mensajes en una aplicación de monitoreo de uso de electricidad (consulte http://rwscott.co.uk/2010/06/14/currentcost-envi-cc128-part-1/ )

Bob Scott
fuente
14

Estoy usando zeroMQ. Quería un sistema simple para pasar mensajes y no necesito la complicación de un corredor. Tampoco quiero un gran sistema empresarial orientado a Java.

Si desea un sistema rápido y simple y necesita admitir múltiples lenguajes (uso C y .net), le recomiendo mirar 0MQ.

Mella
fuente
También usando ZMQ en entorno C / C ++. Muy rapido. Usando el patrón de corredor. Una buena opción para nuestra aplicación de vigilancia VOIP en tiempo real que realiza micro-pmts para granjas de servidores SIP kamailio. Estoy bastante seguro de que podría escribir un corredor muy sofisticado usando ZMQ, pero evaluaría algunos productos adicionales antes de comprometerme con eso.
10

Solo puedo agregar mis 2 centavos sobre ActiveMQ, pero como este es uno de los más populares:

El idioma en el que desea escribir puede ser importante. Aunque ActiveMQ tiene un cliente para la mayoría, su implementación de C # está lejos de ser completa en comparación con la Biblioteca Java.

Esto significa que algunas funcionalidades básicas son escamosas (protocolo de conmutación por error que ... bueno ... falla en algunos casos, no hay soporte de reenvío) y otras simplemente no están allí. Dado que .NET no parece ser tan importante para el proyecto, el desarrollo es bastante lento y no parece haber ningún plan de lanzamiento. El tronco a menudo está roto, por lo que si considera esto, puede considerar contribuir al proyecto si desea que las cosas sigan adelante.

Luego está ActiveMQ en sí, que tiene muchas características agradables, pero también algunos problemas muy extraños. Usamos la versión Fuse (Progress) de activemq por razones de estabilidad, pero incluso entonces hay un par de "errores" extraños que debes tener en cuenta:

  • Corredores que dejan de enviar mensajes en algunas ocasiones
  • Los errores de diario que hacen que la cola muestre mensajes que ya no están allí (no se entregan al consumidor pero aún así)
  • La prioridad aún no está implementada (está en la lista de Problemas desde el inicio de la especie humana)
  • etcétera etcétera.

En general, es un producto bastante bueno SI puedes vivir con sus problemas:

A) no tienen miedo de involucrarse activamente cuando se utiliza .NET
B) desarrollar en Java ;-)

Noctris
fuente
55
Actualización menor: desde hace un tiempo, KahaDB es el almacén de persistencia predeterminado para ActiveMQ. Sin embargo: no es estable en absoluto. En nuestras pruebas, hemos visto corrupciones en la base de datos (algunas restaurables, otras nos cuestan aproximadamente 15,000,000 mensajes) CUIDADO CON ESTO
Noctris
8

¡ZeroMQ es realmente con cero colas! ¡Es un verdadero error! ¡No tiene colas, temas, persistencia, nada! Es solo un middleware para sockets API. Si es lo que estás buscando genial! de lo contrario olvídalo! No es como activeMQ o rabbitmq.

Angek
fuente
8

Hay una comparación de las características y el rendimiento de RabbitMQ ActiveMQ y QPID en
http://bhavin.directi.com/rabbitmq-vs-apache-activemq-vs-apache-qpid/

Personalmente, he probado todos los tres anteriores. RabbitMQ es el mejor rendimiento en mi opinión, pero no tiene opciones de recuperación y conmutación por error. ActiveMQ tiene la mayoría de las características, pero es más lento.

Actualización: HornetQ también es una opción que puede considerar, es JMS Complaint, una mejor opción que ActiveMQ si está buscando una solución basada en JMS.

sheki
fuente
6

Escribí sobre mi experiencia inicial con respecto a AMQP, Qpid y ZeroMQ aquí: http://ron.shoutboot.com/2010/09/25/is-ampq-for-you/

Mi opinión subjetiva es que AMQP está bien si realmente necesita las instalaciones de mensajería persistente y no le preocupa demasiado que el corredor pueda ser un cuello de botella. Además, el cliente C ++ no se encuentra actualmente en AMQP (Qpid no ganó mi soporte; sin embargo, no estoy seguro sobre el cliente ActiveMQ), pero tal vez esté en progreso. ZeroMQ puede ser el camino de otra manera.

ron
fuente
6

He usado ActiveMQ en un entorno de producción durante aproximadamente 3 años. Mientras se hace el trabajo, alinear versiones de las bibliotecas del cliente que funcionan correctamente y están libres de errores puede ser un problema. Actualmente estamos buscando la transición a RabbitMQ.

Kelly
fuente
5

Hay una discusión en los comentarios de esta publicación del blog , sobre Twitter escribiendo su propia cola de mensajes, lo que puede ser interesante.

Steve realizó extensas pruebas de carga y estrés de ActiveMQ, RabbitMQ, etc. ActiveMQ es bastante lento (mucho más lento que Kestrel), RabbitMQ se cuelga constantemente con demasiados productores y muy pocos consumidores.

Sin embargo, probablemente no tendrá una carga similar a Twitter inicialmente :)

crb
fuente
5

Pocas aplicaciones tienen tantas configuraciones de ajuste como ActiveMQ. Algunas características que hacen que ActiveMQ se destaque son:

Tamaño de captación previa configurable. Roscado configurable. Conmutación por error configurable. Notificación administrativa configurable a productores. ... detalles en:

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

cobrien
fuente
0

Abie, todo se reduce a tu caso de uso. En lugar de confiar en la cuenta de otra persona sobre su caso de uso, siéntase libre de publicar su caso de uso en la lista de discusión de rabbitmq. Preguntar en Twitter también te dará algunas respuestas. Mis mejores deseos, alexis


fuente
0

Acerca de ZeroMQ, también conocido como 0MQ, como ya sabrá, es el que le dará la mayor cantidad de mensajes por segundo (la última vez que verifiqué 4 millones por segundo en su servidor de referencia), pero como ya sabrá, el La documentación es inexistente. Te resultará difícil encontrar cómo iniciar los servidores, y mucho menos cómo usarlos. Supongo que eso es en parte por qué nadie contribuyó con 0MQ todavía.

¡Que te diviertas!

Charle
fuente
11
Hay ejemplos en el libro de cocina zeromq.org/docs:cookbook y hay un manual api.zeromq.org/zmq.html .
Nick
77
Si bien zmq es rápido y tiene una API fácil, tenga en cuenta esto: sin persistencia, sin transacciones. No se detectan consumidores lentos o fallados (los mensajes simplemente se eliminan sin ninguna notificación al programa del productor). Nota al margen: zmq no tiene servidor, por lo que no encontrará documentos para iniciar los servidores. Sin embargo, tienen un servidor proxy si necesita algo así.
nos
0

Si también está interesado en implementaciones comerciales, debería echar un vistazo a Nirvana desde my-channel .

Nirvana se utiliza en gran medida dentro de la industria de servicios financieros para el comercio a gran escala de baja latencia y plataformas de distribución de precios.

Existe soporte para una amplia gama de lenguajes de programación de clientes en todos los dominios empresariales, web y móviles.

Las capacidades de agrupamiento son extremadamente avanzadas y merecen una mirada si la HA transparente o el equilibrio de carga son importantes para usted.

Nirvana se puede descargar gratis con fines de desarrollo.

eddie mcdaid
fuente
2
Esto debería haber tenido un descargo de responsabilidad de que es una promoción de un empleado de my-channel.
Barón Schwartz