ActiveMQ o RabbitMQ o ZeroMQ o [chiuso]


645

Saremmo interessati a sentire qualsiasi esperienza con i pro e contro di ActiveMQ vs RabbitMQ vs ZeroMQ. Sono benvenute anche informazioni su altre code di messaggi interessanti.


2
Sono nuovo nella coda dei messaggi e stavo leggendo di più sul caso d'uso reale su stackoverflow.com/q/1035949/181870 . Più tardi mentre cercavo argomenti / articoli relativi alla coda dei messaggi (in particolare JMS), mi sono imbattuto in OpenJMS , un'implementazione open source della specifica API 1.1 di Java Message Service di Sun Microsystems. Ciò che mi sorprende è che non è trattato / discusso qui? Volevo solo verificare con la community se OpenJMS fosse correlato a questo argomento / discussione e, in tal caso, come da PO, qualsiasi esperienza con pro e contro dello stesso sarebbe di aiuto.
Gnanam,

3
3 anni dopo, una nota per le persone che navigano qui ... pensa al PERCHÉ vuoi usare il middleware di accodamento dei messaggi. Se il motivo è distribuire le attività all'interno di un cluster, guarda Sedano. Funziona a un livello di astrazione più elevato rispetto alle soluzioni in stile MQ, utilizza RabbitMQ per spostare i messaggi, ma ha un supporto eccezionale per la semantica specifica dell'attività.
Chris Johnson,

Risposte:


342

Modifica: la mia risposta iniziale era fortemente focalizzata su AMQP. Ho deciso di riscriverlo per offrire una visione più ampia sull'argomento.

Queste 3 tecnologie di messaggistica hanno approcci diversi sulla costruzione di sistemi distribuiti:

RabbitMQ è una delle principali implementazioni del protocollo AMQP (insieme a Apache Qpid). Pertanto, implementa un'architettura broker, il che significa che i messaggi vengono messi in coda su un nodo centrale prima di essere inviati ai client. Questo approccio rende RabbitMQ molto facile da usare e distribuire, poiché scenari avanzati come routing, bilanciamento del carico o accodamento permanente dei messaggi sono supportati in poche righe di codice. Tuttavia, lo rende anche meno scalabile e "più lento" perché il nodo centrale aggiunge latenza e le buste dei messaggi sono piuttosto grandi.

ZeroMq è un sistema di messaggistica molto leggero appositamente progettato per scenari ad alta produttività / bassa latenza come quello che puoi trovare nel mondo finanziario. Zmq supporta molti scenari di messaggistica avanzati ma, contrariamente a RabbitMQ, dovrai implementare la maggior parte di essi da soli combinando vari elementi del framework (ad esempio: socket e dispositivi). Zmq è molto flessibile ma dovrai studiare circa 80 pagine della guida (che consiglio di leggere a chiunque stia scrivendo un sistema distribuito, anche se non usi Zmq) prima di poter fare qualcosa di più complicato dell'invio di messaggi tra 2 pari.

ActiveMQ è nel mezzo. Come Zmq, può essere distribuito con topologie sia broker sia P2P. Come RabbitMQ, è più semplice implementare scenari avanzati ma di solito a scapito delle prestazioni non elaborate. È il coltellino svizzero di messaggistica :-).

Infine, tutti e 3 i prodotti:

  • avere API client per i linguaggi più comuni (C ++, Java, .Net, Python, Php, Ruby, ...)
  • avere una forte documentazione
  • sono attivamente supportati

22
Sebbene sia vero, non sono sicuro che l'adozione di AMQP abbia una forte correlazione con la domanda originale. Penso che ci siano considerazioni più importanti per la scelta di una coda di messaggi rispetto al protocollo di filo sottostante che utilizza.
StaxMan,

8
La domanda non menziona la necessità di AMQP, ma questa risposta è focalizzata su AMQP. Se dovessimo assumere JMS come requisito, la risposta sarebbe sostanzialmente il contrario: ActiveMQ è il più popolare, RabbitMQ ha un supporto che probabilmente dovrebbe funzionare. Se non viene assunto alcun protocollo wire: vedere altre risposte.
Fletch,

19
Avendo lavorato in RabbitMQ e ActiveMQ, ti consiglio di stare lontano da ActiveMQ. Le versioni sono molto difettose e non ho avuto problemi con le macchine che cadono e le perdite di memoria, ecc. RabbitMQ invece funziona. Dopo averlo collegato non ho MAI dovuto guardarlo di nuovo. Fa solo ciò di cui ha bisogno. Se vuoi, ho un semplice tutorial RabbitMQ sul mio blog jarloo.com/rabbitmq-c-tutorial
Kelly,

2
Dopo aver esaminato i posti di lavoro per RabbitMQ rispetto ad ActiveMQ, RabbitMQ sembra essere molto più richiesto. ActiveMQ è in circolazione da più tempo ma è richiesto dai datori di lavoro quasi altrettanto.

1
Anche la guida per ZMQ è davvero una lettura divertente e buona :)
meawoppl

174

Perché ti sei perso Sparrow , Starling , Kestrel , Amazon SQS , Beanstalkd , Kafka , IronMQ ?

Server di coda messaggi

I server delle code dei messaggi sono disponibili in varie lingue, Erlang (RabbitMQ), C (beanstalkd), Ruby (Starling o Sparrow), Scala (Kestrel, Kafka) o Java (ActiveMQ). Una breve panoramica è disponibile qui

Passero

  • scritto da Alex MacCaw
  • Sparrow è una coda leggera scritta in Ruby che "parla memcache"

Storno

Gheppio

  • scritto da Robey Pointer
  • Clone di storno scritto in Scala (un porto di storno dal rubino alla scala)
  • Le code sono archiviate in memoria, ma sono registrate sul disco

RabbitMQ

  • RabbitMQ è un server di coda messaggi in Erlang
  • archivia i lavori in memoria (coda messaggi)

Apache ActiveMQ

  • ActiveMQ è un broker di messaggi open source in Java

Beanstalkd

Amazon SQS

Kafka

  • Scritto a LinkedIn in Scala
  • Utilizzato da LinkedIn per scaricare l'elaborazione di tutte le pagine e altre visualizzazioni
  • L'impostazione predefinita è l'utilizzo della persistenza, utilizza la cache del disco del sistema operativo per i dati attivi (ha un throughput più elevato rispetto a uno dei precedenti con la persistenza abilitata)
  • Supporta l'elaborazione sia online che offline

ZMQ

  • La libreria socket che funge da framework di concorrenza
  • Più veloce di TCP, per prodotti cluster e supercomputer
  • Trasporta messaggi attraverso inproc, IPC, TCP e multicast
  • Connetti da N a N tramite fanout, pubsub, pipeline, richiesta-risposta
  • I / O asincrono per app di passaggio di messaggi multicore scalabili

EagleMQ

  • EagleMQ è un gestore code open source, ad alte prestazioni e leggero.
  • Scritto in C.
  • Memorizza tutti i dati in memoria e supporta la persistenza.
  • Ha il suo protocollo. Supporta il lavoro con code, rotte e canali.

IronMQ

  • IronMQ
  • Scritto in Go
  • Servizio di coda completamente gestito
  • Disponibile sia in versione cloud che on-premise

Spero che questo possa esserci utile. fonte


Hai qualche idea / pensiero di aggiungere / commentare la mia domanda posta nell'area dei commenti di questa domanda qui - stackoverflow.com/questions/731233/… ?
Gnanam,

Hanno una gestione dei conflitti? Ho sempre riscontrato questo problema con i sistemi di coda. Ad esempio il blocco di un produttore se la coda è piena in base al numero di elementi (non alle risorse di memoria).
sw.

1
queues.io - Mente di aggiungere dettagli mancanti lì vs. qui.
asyncwait,

83

Più informazioni di quante vorresti sapere:

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


AGGIORNARE

Sto solo elaborando ciò che Paul ha aggiunto nel commento. La pagina sopra menzionata è morta dopo il 2010, quindi leggi con un pizzico di sale. Molta roba è stata cambiata in 3 anni.

Storia della pagina Wiki


7
Penso che questi ragazzi stiano pensando a code sbagliate - le code non dovrebbero essere 1 (o più) per utente. Dovrebbero mettere il loro lavoro in poche code e quindi utilizzarlo. caselle di posta (o mbox) per ciascun utente.
Michael Deardeuff,

1
Michael - vuoi elaborare un po 'di più? Il problema è la consegna in tempo reale in un sistema basato su chat di gruppo. Se sto capendo correttamente, stai parlando di un meccanismo di archiviazione durevole per i messaggi come endpoint (posta in arrivo)? In tal caso, allora non si adatta al conto, vogliono che la chat venga recapitata immediatamente e che i clienti siano abbonati diretti? Per quanto ne so, avere un sacco di code basate su argomenti non è un caso d'uso ottimizzato?
Josh,

1
Aggiornamento: la pagina wiki di SecondLife è stata scritta nel 2009. Ormai, nel 2013, molti dei punti specifici citati sulle diverse code di messaggi che hanno esaminato non sono più aggiornati, a causa dei continui miglioramenti in tutti i MQ. La maggior parte o tutti gli MQ che hanno testato sono meglio, in un certo senso, ormai.
Paul Legato,

71

Dipende molto dal tuo caso d'uso.

Il confronto di 0MQ con ActiveMQ o RabbitMQ non è corretto. ActiveMQ e RabbitMQ sono sistemi di messaggistica che richiedono installazione e amministrazione. Offrono molto più di ZeroMQ. Hanno code permanenti, supporto per le transazioni, ecc.

ZeroMQ è un'implementazione socket orientata ai messaggi leggera. È inoltre adatto per la programmazione asincrona in-process. È possibile eseguire un "Sistema di messaggistica aziendale" su ZeroMQ, ma è necessario implementare molto da soli.

Così:

ActiveMQ, RabbitMQ, Websphere MQ e MSMQ sono "Code di messaggi aziendali"

ZeroMQ è una libreria IPC orientata ai messaggi.


7
Puoi usarne più di uno. rabbitmq.com/blog/2010/10/18/rabbitmq0mq-bridge parla di come è possibile utilizzare 0MQ per creare un bridge tra diversi broker RabbitMQ e creare una federazione liberamente accoppiata.
Michael Dillon,

34

C'è un confronto tra RabbitMQ e ActiveMQ qui . Immediatamente, ActiveMQ è configurato per garantire la consegna dei messaggi, il che può dare un'impressione lenta rispetto ai sistemi di messaggistica meno affidabili. Se lo desideri, puoi sempre modificare la configurazione per le prestazioni e ottenere prestazioni almeno pari a quelle di qualsiasi altro sistema di messaggistica. Almeno hai questa opzione. Ci sono molte informazioni nei forum e nelle FAQ di ActiveMQ per la configurazione per il ridimensionamento, le prestazioni e l'alta disponibilità. Inoltre, ActiveMQ supporterà AMQP 1.0 quando le specifiche saranno finalizzate, insieme ad altri formati di filo, come STOMP.

Un altro vantaggio di ActiveMQ è il suo progetto Apache, quindi esiste una diversità nella comunità degli sviluppatori e non è legata a un'azienda.


22

Non ho usato ActiveMQ o RabbitMQ ma ho usato ZeroMQ. La grande differenza per come la vedo tra ZeroMQ e ActiveMQ ecc. È che 0MQ è senza intermediari e non ha affidabilità integrata per la consegna dei messaggi. Se stai cercando un'API di messaggistica facile da usare che supporti molti modelli di messaggistica, trasporti, piattaforme e collegamenti linguistici, vale la pena dare un'occhiata a 0MQ. Se stai cercando una piattaforma di messaggistica completa, 0MQ potrebbe non andare bene.

Vedi www.zeromq.org/docs:cookbook per molti esempi di come usare 0MQ.

Uso correttamente 0MQ per il passaggio di messaggi in un'applicazione di monitoraggio dell'utilizzo dell'elettricità (vedere http://rwscott.co.uk/2010/06/14/currentcost-envi-cc128-part-1/ )


14

Sto usando zeroMQ. Volevo un semplice sistema di trasmissione dei messaggi e non ho bisogno della complicazione di un broker. Inoltre, non voglio un enorme sistema aziendale orientato a Java.

Se vuoi un sistema veloce e semplice e devi supportare più lingue (io uso C e .net) allora ti consiglio di guardare 0MQ.


Anche usando ZMQ in ambiente C / C ++. Molto veloce. Utilizzando il modello broker. Una buona soluzione per la nostra app watch-dog VOIP in tempo reale che fa micro-pmts per farm di server SIP kamailio. Abbastanza sicuro di poter scrivere un broker molto sofisticato usando ZMQ, ma valuterei alcuni prodotti aggiuntivi prima di impegnarmi in questo.

10

Posso solo aggiungere i miei 2 centesimi su ActiveMQ ma poiché questo è uno dei più popolari:

La lingua in cui vuoi scrivere potrebbe essere importante. Sebbene ActiveMQ abbia un client per la maggior parte, la loro implementazione in C # è lungi dall'essere completa rispetto alla Java Library.

Ciò significa che alcune funzionalità di base sono traballanti (protocollo di fail-over che ... beh ... fallisce in alcuni casi, nessun supporto di riconsegna) e altri semplicemente non c'è. Poiché .NET non sembra essere così importante per il progetto, lo sviluppo è piuttosto lento e non sembra esserci alcun piano di rilascio. Il bagagliaio è spesso rotto, quindi se lo consideri, potresti voler considerare di contribuire al progetto se vuoi che le cose vadano avanti.

Poi c'è lo stesso ActiveMQ che ha molte caratteristiche interessanti ma anche alcuni problemi molto strani. Usiamo la versione Fuse (Progress) di activemq per motivi di stabilità, ma anche allora ci sono un paio di strani "bug" che dovresti tenere a mente:

  • Broker che interrompono l'invio di messaggi in alcune occasioni
  • Errori journal che fanno in modo che la coda mostri messaggi che non sono più presenti (non vengono recapitati al consumatore ma comunque)
  • La priorità non è ancora implementata (è nell'elenco dei problemi dall'inizio del genere umano)
  • ecc ecc.

Tutto sommato, è un prodotto abbastanza carino SE puoi vivere con i suoi problemi:

A) non aver paura di essere coinvolto attivamente quando usi .NET
B) sviluppare in java ;-)


5
Aggiornamento secondario: Da un po 'di tempo, KahaDB è l'archivio di persistenza predefinito per ActiveMQ. Tuttavia: non è affatto stabile. Nei nostri test, abbiamo riscontrato corruzioni del database (alcune ripristinabili, altre che ci costano circa 15.000.000 di messaggi) ATTENZIONE A QUESTO
Noctris

8

ZeroMQ è davvero con zero code! È davvero un errore! Non ha code, argomenti, persistenza, niente! È solo un middleware per l'API socket. Se è quello che sembri bello! altrimenti dimenticalo! non è come activeMQ o rabbitmq.


8

C'è un confronto tra le funzionalità e le prestazioni di RabbitMQ ActiveMQ e QPID fornite su
http://bhavin.directi.com/rabbitmq-vs-apache-activemq-vs-apache-qpid/

Personalmente ho provato tutti e tre. Secondo me RabbitMQ è la migliore prestazione, ma non ha opzioni di failover e recupero. ActiveMQ ha il maggior numero di funzionalità, ma è più lento.

Aggiornamento: HornetQ è anche un'opzione che puoi esaminare, è JMS Complaint, un'opzione migliore di ActiveMQ se stai cercando una soluzione basata su JMS.


6

Ho scritto della mia esperienza iniziale riguardo AMQP, Qpid e ZeroMQ qui: http://ron.shoutboot.com/2010/09/25/is-ampq-for-you/

La mia opinione soggettiva è che AMQP va bene se hai davvero bisogno delle strutture di messaggistica persistenti e non è troppo preoccupato che il broker possa essere un collo di bottiglia. Inoltre, al momento manca il client C ++ per AMQP (Qpid non ha ottenuto il mio supporto; non sono sicuro del client ActiveMQ), ma forse è in fase di elaborazione. ZeroMQ potrebbe essere diversamente.


6

Ho usato ActiveMQ in un ambiente di produzione per circa 3 anni. Mentre esegue il lavoro, allineare le versioni delle librerie client che funzionano correttamente e sono prive di bug può essere un problema. Stavamo attualmente cercando di passare a RabbitMQ.


5

C'è qualche discussione nei commenti di questo post sul blog , su Twitter che scrive la propria coda di messaggi, che può essere interessante.

Steve ha svolto numerosi test di carico e stress su ActiveMQ, RabbitMQ, ecc. ActiveMQ è in realtà piuttosto lento (molto più lento di Kestrel), RabbitMQ si blocca costantemente con troppi produttori e troppo pochi consumatori.

Probabilmente non avrai inizialmente un caricamento simile a Twitter :)


5

Poche applicazioni hanno tante configurazioni di ottimizzazione come ActiveMQ. Alcune caratteristiche che fanno risaltare ActiveMQ sono:

Dimensione prefetch configurabile. Threading configurabile. Failover configurabile. Notifica amministrativa configurabile per i produttori. ... dettagli a:

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


0

Bene, tutto dipende dal tuo caso d'uso. Piuttosto che fare affidamento sul conto di qualcun altro del proprio caso d'uso, sentiti libero di pubblicare il tuo caso d'uso nell'elenco conigliomq-discuss. Chiedere su Twitter ti darà anche alcune risposte. I migliori auguri, alexis


0

A proposito di ZeroMQ aka 0MQ, come forse già saprai, è quello che ti farà ottenere il maggior numero di messaggi al secondo (erano circa 4 milioni al secondo sul loro server di riferimento l'ultima volta che ho controllato), ma come potresti già sapere, il la documentazione è inesistente. Avrai difficoltà a trovare il modo di avviare i server, figuriamoci come usarli. Immagino che sia in parte il motivo per cui nessuno ha ancora contribuito a 0MQ.

Divertiti!


11
Ci sono esempi nel libro di cucina zeromq.org/docs:cookbook e c'è un manuale api.zeromq.org/zmq.html .
Nick,

7
mentre zmq è veloce e ha un'API semplice, tieni presente questo: nessuna persistenza, nessuna transazione. Nessun rilevamento di consumatori falsi o lenti (i messaggi vengono semplicemente eliminati senza alcuna notifica al programma del produttore). Sidenote: zmq è privo di server, quindi non troverai documenti per l'avvio dei server. Hanno un server proxy se hai bisogno di qualcosa del genere però.
nn.

0

Se sei interessato anche alle implementazioni commerciali, dai un'occhiata a Nirvana dai miei canali .

Il Nirvana è ampiamente utilizzato nel settore dei servizi finanziari per piattaforme di trading e distribuzione dei prezzi su larga latenza su larga scala.

È disponibile il supporto per una vasta gamma di linguaggi di programmazione client in tutti i domini aziendale, Web e mobile.

Le funzionalità di clustering sono estremamente avanzate e vale la pena dare un'occhiata se l'HA trasparente o il bilanciamento del carico sono importanti per te.

Nirvana può essere scaricato gratuitamente per scopi di sviluppo.


2
Ciò avrebbe dovuto essere esonerato dal fatto che si tratta di una promozione di un dipendente my-channel.
Barone Schwartz,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.