ActiveMQ veya RabbitMQ veya ZeroMQ veya [kapalı]


645

ActiveMQ vs RabbitMQ vs ZeroMQ artıları ve eksileri ile herhangi bir deneyim duymak isteriz. Diğer ilginç mesaj kuyrukları hakkında bilgi de kabul edilir.


2
İleti kuyruğunda yeniyim ve stackoverflow.com/q/1035949/181870 adresindeki gerçek kullanım durumu hakkında daha fazla şey okuyordum . Daha sonra mesaj kuyruğuyla (özellikle JMS) ilgili konular / makaleler için googling yaparken , Sun Microsystems'in Java Message Service API 1.1 Spesifikasyonu'nun açık kaynaklı bir uygulaması olan OpenJMS ile karşılaştım . Şaşırdığım şey, burada ele alınmaması / tartışılmaması mı? Ben sadece OpenJMS bu konu / tartışma ile ilgili olup olmadığını toplumla kontrol etmek istedim ve eğer öyleyse, OP göre, artılarını ve eksilerini aynı deneyimler yardımcı olacaktır.
Gnanam

3
3 yıl sonra, burada gezinen insanlar için bir not ... NEDEN mesaj kuyruğu ara katmanı kullanmak istediğinizi düşünün. Nedeni bir küme içindeki görevleri dağıtmaksa, Kereviz'e bakın. MQ tarzı çözümlerden daha yüksek bir soyutlama düzeyinde çalışır, iletileri taşımak için RabbitMQ kullanır, ancak göreve özgü anlambilim için olağanüstü bir desteğe sahiptir.
Chris Johnson

Yanıtlar:


342

Edit: Benim ilk cevap AMQP güçlü bir odak vardı. Konu hakkında daha geniş bir görüş sunmak için yeniden yazmaya karar verdim.

Bu 3 mesajlaşma teknolojisinin dağıtılmış sistemler oluşturmak için farklı yaklaşımları vardır:

RabbitMQ , AMQP protokolünün (Apache Qpid ile birlikte) önde gelen uygulamalarından biridir. Bu nedenle, bir aracı mimarisi uygular, yani iletiler istemcilere gönderilmeden önce merkezi bir düğümde kuyruğa alınır. Yönlendirme, yük dengeleme veya kalıcı mesaj kuyruğu gibi gelişmiş senaryolar sadece birkaç kod satırında desteklendiğinden, bu yaklaşım RabbitMQ'nun kullanımını ve dağıtımını kolaylaştırır. Bununla birlikte, merkezi düğüm gecikme süresi eklediğinden ve mesaj zarfları oldukça büyük olduğundan, daha az ölçeklenebilir ve "daha yavaş" hale getirir.

ZeroMq , finans dünyasında bulabileceğiniz gibi yüksek verim / düşük gecikme senaryoları için özel olarak tasarlanmış çok hafif bir mesajlaşma sistemidir. Zmq birçok gelişmiş mesajlaşma senaryosunu destekler, ancak RabbitMQ'nun aksine, çerçevenin çeşitli parçalarını (örneğin, soketler ve cihazlar) birleştirerek bunların çoğunu kendiniz uygulamanız gerekir. Zmq çok esnektir ancak mesaj göndermekten daha karmaşık bir şey yapmadan önce kılavuzun 80 sayfasını veya daha fazlasını (Zmq kullanmasanız bile dağıtılmış sistem yazan herkes için okumayı öneririm) incelemeniz gerekir. 2 akran arasında.

ActiveMQ orta zeminde. Zmq gibi, hem broker hem de P2P topolojileri ile konuşlandırılabilir. RabbitMQ gibi, gelişmiş senaryoları uygulamak daha kolaydır, ancak genellikle ham performans pahasına. Bu mesajlaşma İsviçre çakısı :-).

Son olarak, tüm 3 ürün:

  • en yaygın diller için istemci API'ları (C ++, Java, .Net, Python, Php, Ruby,…)
  • güçlü belgelere sahip olmak
  • aktif olarak desteklenmektedir

22
Doğru olsa da, AMQP'nin benimsenmesinin orijinal soru ile güçlü bir korelasyonu olup olmadığından emin değilim. Bir kişinin mesaj kuyruğu seçimi için temel tel protokolünü kullandığından daha önemli hususlar olduğunu düşünürdüm.
StaxMan

8
Soru AMQP gerektirdiğinden bahsetmiyor, ancak bu cevap AMQP'ye odaklanıyor. JMS'yi bir gereklilik olarak kabul edersek, cevap temelde tersi olurdu: ActiveMQ en popüler olanı, RabbitMQ'nun muhtemelen çalışması gereken bazı desteği var. Hiçbir tel protokolü varsayılmazsa: diğer cevaplara bakınız.
Fletch

19
RabbitMQ ve ActiveMQ'da çalıştıktan sonra ActiveMQ'dan uzak durmanızı tavsiye ederim. Bültenleri çok adamcağız, ve aşağı makineleri ve bellek sızıntıları vb ile ilgili sorunların sonu yoktu ... Öte yandan RabbitMQ sadece çalışıyor. Taktıktan sonra ASLA tekrar bakmak zorunda kalmadım. Sadece ihtiyaç duyduğu şeyi yapar. Eğer benim blog basit bir RabbitMQ öğretici var jarloo.com/rabbitmq-c-tutorial
Kelly

2
RabbitMQ ile ActiveMQ arasındaki iş ilanlarına baktıktan sonra, RabbitMQ çok daha fazla talep görüyor. ActiveMQ daha uzun süredir var ama neredeyse işverenler tarafından talep ediliyor.

1
ZMQ için rehber de gerçekten eğlenceli ve iyi bir okuma :)
meawoppl

174

Neden Sparrow , Starling , Kestrel , Amazon SQS , Beanstalkd , Kafka , IronMQ'yu kaçırdınız ?

Message Queue Sunucuları

Mesaj kuyruğu sunucuları Erlang (RabbitMQ), C (beanstalkd), Ruby (Starling veya Sparrow), Scala (Kestrel, Kafka) veya Java (ActiveMQ) olarak mevcuttur. Kısa bir genel bakışı burada bulabilirsiniz

serçe

  • Alex MacCaw tarafından yazılmıştır
  • Sparrow, Ruby'de yazılan ve “memcache konuşan” hafif bir kuyruktur

Sığırcık

Kerkenez

  • Robey Pointer tarafından yazılmış
  • Scala'da yazılmış starling klonu (Ruby'den Scala'ya Starling limanı)
  • Kuyruklar bellekte depolanır, ancak diskte oturum açar

RabbitMQ

  • RabbitMQ Erlang'daki Message Queue Sunucusudur
  • işleri bellekte saklar (mesaj kuyruğu)

Apache ActiveMQ

  • ActiveMQ, Java'da açık kaynaklı bir mesaj aracısıdır

Beanstalkd

Amazon SQS

Kafka

  • Yazan: LinkedIn Scala
  • LinkedIn tarafından tüm sayfaların ve diğer görünümlerin işlenmesini boşaltmak için kullanılır
  • Kalıcılığı kullanma varsayılanları, sıcak veriler için OS disk önbelleğini kullanır (yukarıdakilerden herhangi birinin kalıcılığı etkinleştirdikten sonra daha yüksek verimi vardır)
  • Hem çevrimiçi hem de çevrimdışı işleme olarak destekler

ZMQ

  • Eşzamanlılık çerçevesi görevi gören soket kütüphanesi
  • Kümelenmiş ürünler ve süper bilgi işlem için TCP'den daha hızlı
  • İletileri inproc, IPC, TCP ve çok noktaya yayın arasında taşır
  • N-to-N'yi fanout, pubsub, boru hattı, istek-cevap yoluyla bağlayın
  • Ölçeklenebilir çok çekirdekli mesaj geçirme uygulamaları için zaman uyumsuz G / Ç

EagleMQ

  • EagleMQ açık kaynaklı, yüksek performanslı ve hafif bir kuyruk yöneticisidir.
  • C ile yazılmış
  • Tüm verileri hafızaya kaydeder ve kalıcılığı destekler.
  • Kendi protokolü var. Kuyruklar, rotalar ve kanallarla çalışmayı destekler.

IronMQ

  • IronMQ
  • Go ile yazıldı
  • Tamamen yönetilen kuyruk hizmeti
  • Hem bulut sürümü hem de şirket içi olarak kullanılabilir

Bunun bizim için yararlı olacağını umuyorum. kaynak


Bu sorunun buradaki yorum alanında sorulan soruya eklemek / yorum yapmak için herhangi bir fikriniz / fikriniz var mı - stackoverflow.com/questions/731233/… ?
Gnanam

Çekişme yönetimi var mı? Bu sorunu her zaman kuyruk sistemlerinde buldum. Örneğin, sıra öğe sayısına bağlıysa (bellek kaynaklarına değil) bir üreticiyi engelleme.
sw.

1
queues.io - Burada eksik olanlara burada eksik detaylar eklemeyi unutmayın.
asyncwait

83

Bilmek istediğinizden daha fazla bilgi:

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


GÜNCELLEME

Pavlus'un yorumda eklediklerini ayrıntılarıyla anlatmak. Yukarıda belirtilen sayfa 2010 yılından sonra, yani bir tutam tuz ile okumak öldü. 3 yılda çok şey değiştirildi.

Wiki Sayfasının Tarihçesi


7
Bu adamların sıraları yanlış düşündüklerini düşünüyorum - sıralar kullanıcı başına 1 (veya daha fazla) olmamalıdır. Onlar işlerini koyarak olmalıdır birkaç kuyruklar ve ardından kullanan. her kullanıcı için gelen kutuları (veya mbox'lar).
Michael Deardeuff

1
Michael - biraz daha ayrıntıya girmek ister misin? Sorun, grup sohbeti tabanlı bir sistemde gerçek zamanlı teslimattır. Doğru anlıyorsam, mesajlar için uç nokta (gelen kutusu) olarak dayanıklı bir depolama mekanizmasından mı bahsediyorsunuz? Öyleyse, faturaya uymuyor, sohbetin hemen teslim edilmesini ve müşterilerin doğrudan abone olmasını istiyorlar mı? Bildiğim kadarıyla konu tabanlı kuyruklar bir ton optimize edilmiş bir kullanım durumu değil söyleyebilirim?
Josh

1
Güncelleme: SecondLife wiki sayfası 2009 yılında yazılmıştır. Şimdiye kadar, 2013 yılında, tüm MQ'larda devam eden iyileştirmeler nedeniyle, araştırdıkları farklı mesaj kuyrukları hakkında bahsedilen belirli noktaların birçoğu artık güncel değil. Test ettikleri MQ'ların çoğu veya tümü şimdiye kadar bir anlamda daha iyidir.
Paul Legato

71

Bu gerçekten sizin kullanım durumunuza bağlıdır.

0MQ'nun ActiveMQ veya RabbitMQ ile karşılaştırılması adil değildir. ActiveMQ ve RabbitMQ, kurulum ve yönetim gerektiren Mesajlaşma Sistemleridir. ZeroMQ'dan çok daha fazlasını sunuyorlar. Gerçek kalıcı Kuyrukları, İşlem Desteği vb. Var.

ZeroMQ hafif bir mesaj odaklı soket uygulamasıdır. İşlem içi asenkron programlama için de uygundur. ZeroMQ üzerinde bir "Kurumsal Mesajlaşma Sistemi" çalıştırmak mümkündür, ancak kendi başınıza çok şey uygulamanız gerekir.

Yani:

ActiveMQ, RabbitMQ, Websphere MQ ve MSMQ "Kurumsal Mesaj Kuyrukları" dır.

ZeroMQ, mesaj yönelimli bir IPC Kütüphanesidir.


7
Birden fazla kullanabilirsiniz. rabbitmq.com/blog/2010/10/18/rabbitmq0mq-bridge , birkaç RabbitMQ aracısı arasında köprü oluşturmak ve gevşek bir şekilde birleştirilmiş bir federasyon oluşturmak için 0MQ'yu nasıl kullanabileceğinizi anlatıyor.
Michael Dillon

34

Burada RabbitMQ ve ActiveMQ arasında bir karşılaştırma var . Kutudan çıktığı gibi, ActiveMQ mesaj iletimini garanti edecek şekilde yapılandırılmıştır - bu da daha az güvenilir mesajlaşma sistemlerine kıyasla izlenimi yavaşlatabilir. İsterseniz performans yapılandırmasını her zaman değiştirebilir ve en azından diğer mesajlaşma sistemleri kadar iyi performans elde edebilirsiniz. En azından bu seçeneğin var. Forumlar ve ölçeklendirme, performans ve yüksek kullanılabilirlik için yapılandırma için ActiveMQ SSS hakkında birçok bilgi var. Ayrıca, STMP gibi diğer kablo formatlarıyla birlikte, spesifikasyon tamamlandığında ActiveMQ AMQP 1.0'ı destekleyecektir.

ActiveMQ için bir başka artı da bir Apache projesidir, bu yüzden geliştirici topluluğunda çeşitlilik vardır - ve bir şirkete bağlı değildir.


22

ActiveMQ veya RabbitMQ kullanmadım ama ZeroMQ kullandım. ZeroMQ ve ActiveMQ vb. Arasında gördüğüm en büyük fark, 0MQ'nun aracısız ve mesaj teslimi için güvenilirliğe sahip olmamasıdır. Birçok mesajlaşma desenini, nakliyeyi, platformu ve dil bağlantısını destekleyen kullanımı kolay bir mesajlaşma API'si arıyorsanız, 0MQ kesinlikle bir göz atmaya değer. Tam bir mesajlaşma platformu arıyorsanız 0MQ faturaya uymayabilir.

0MQ'nun nasıl kullanılabileceğine dair çok sayıda örnek için www.zeromq.org/docs:cookbook adresine bakın .

Ben başarılı bir elektrik kullanımını izleme uygulamasında mesaj geçişine 0MQ kullanarak (bkz http://rwscott.co.uk/2010/06/14/currentcost-envi-cc128-part-1/ )


14

Ben zeroMQ kullanıyorum. Basit bir mesaj geçiş sistemi istedim ve bir komisyoncunun komplikasyonuna ihtiyacım yok. Ayrıca büyük bir Java yönelimli kurumsal sistem istemiyorum.

Hızlı, basit bir sistem istiyorsanız ve birden fazla dili desteklemeniz gerekiyorsa (C ve .net kullanıyorum) o zaman 0MQ'ya bakmanızı tavsiye ederim.


Ayrıca C / C ++ ortamında ZMQ kullanımı. Çok hızlı. Aracı desenini kullanma. Kamailio SIP sunucularının çiftlikleri için mikro-PM'ler yapan gerçek zamanlı VOIP bekçi köpeği uygulamasına iyi bir uyum. ZMQ kullanarak çok sofistike bir broker yazabileceğimden eminim, ancak buna başlamadan önce bazı ek ürünleri değerlendireceğim.

10

ActiveMQ hakkında sadece 2 sent ekleyebilirim, ancak bu en popülerlerden biri olduğu için:

Yazmak istediğiniz dil önemli olabilir. ActiveMQ'nun çoğu için bir istemcisi olmasına rağmen, C # uygulaması Java Kitaplığı ile karşılaştırıldığında tam değildir.

Bu, bazı temel işlevlerin kesintili olduğu anlamına gelir (bazı durumlarda başarısız ... başarısızlık protokolü, yeniden dağıtım desteği yok) ve diğerleri sadece orada değil. .NET, proje için o kadar önemli görünmediğinden, geliştirme oldukça yavaştır ve herhangi bir yayın planı yoktur. Gövde genellikle kırılır, bu yüzden bunu düşünürseniz, bir şeyler yapmak istiyorsanız projeye katkıda bulunmayı düşünebilirsiniz.

Sonra bir sürü güzel özelliğe sahip ActiveMQ var ama bazı çok garip sorunlar da var. Stabilite nedeniyle activemq'in Fuse (Progress) sürümünü kullanıyoruz, ancak o zaman bile akılda tutmak istediğiniz birkaç tuhaf "hata" var:

  • Bazı durumlarda mesaj göndermeyi durduran aracılar
  • Kuyruğa neden olan Günlük Hataları artık orada olmayan iletileri gösteriyor (tüketiciye teslim edilmiyor ama yine de)
  • Öncelik hala uygulanmadı (insan türünün başlamasından bu yana Sorunlar listesinde yer alıyor)
  • vesaire vesaire.

Her şeyden önce, sorunlarıyla yaşayabiliyorsanız, oldukça güzel bir ürün:

A) .NET kullanırken aktif olarak yer almaktan korkmayın
B) java ;-)


5
Küçük Güncelleme: Bir süredir KahaDB, ActiveMQ için varsayılan kalıcılık deposudur. Ancak: hiç kararlı değil. Testlerimizde veritabanı bozulmalarını gördük (bazıları geri yüklenebilir, diğerleri bize yaklaşık 15.000.000
iletiye

8

ZeroMQ gerçekten sıfır kuyruklu! Bu gerçekten bir hatadır! Bu sıralar, konular, kalıcılık, hiçbir şey hav yok! Bu yalnızca yuva API'sı için bir ara katman yazılımıdır. Eğer serin görünüyor ne ise! aksi takdirde unutun! activeMQ veya rabbitmq gibi değildir.


8

Http://bhavin.directi.com/rabbitmq-vs-apache-activemq-vs-apache-qpid/ adresinde verilen RabbitMQ ActiveMQ ve QPID'in özelliklerinin ve performanslarının bir karşılaştırması vardır.

Şahsen yukarıdaki üçünün hepsini denedim. RabbitMQ bana göre en iyi performans, ancak yük devretme ve kurtarma seçeneklerine sahip değil. ActiveMQ en çok özelliğe sahiptir, ancak daha yavaştır.

Güncelleme: HornetQ da bakabileceğiniz bir seçenek, JMS Şikayeti, JMS tabanlı bir çözüm arıyorsanız ActiveMQ'dan daha iyi bir seçenek.


6

AMQP, Qpid ve ZeroMQ ile ilgili ilk deneyimimi burada yazdım: http://ron.shoutboot.com/2010/09/25/is-ampq-for-you/

Benim öznel görüşüm AMQP gerçekten kalıcı mesajlaşma tesislerine ihtiyacınız varsa ve komisyoncu bir darboğaz olabilir çok endişe değil iyi olduğunu. Ayrıca, C ++ istemcisi şu anda AMQP için eksik (Qpid desteğimi kazanmadı; ancak ActiveMQ istemcisinden emin değilim), ancak belki de devam ediyor. ZeroMQ başka türlü olabilir.


6

ActiveMQ'yu yaklaşık 3 yıldır üretim ortamında kullanıyorum. İşi yaparken, istemci kitaplıklarının düzgün çalışan ve hatasız sürümlerini sıralamak sorun olabilir. Şu anda RabbitMQ'ya geçiş yapmak istiyorlardı.


5

Bu blog yazısının yorumlarında, Twitter'ın kendi mesaj kuyruğunu yazması hakkında ilginç olabilecek bazı tartışmalar var .

Steve, ActiveMQ, RabbitMQ, vb. Gibi kapsamlı yük ve stres testleri yaptı. ActiveMQ aslında oldukça yavaş (Kestrel'den çok daha yavaş), RabbitMQ sürekli olarak çok fazla üretici ve çok az tüketici ile çöküyor.

Muhtemelen başlangıçta Twitter benzeri bir yükünüz olmayacak :)


5

Çok az uygulama ActiveMQ kadar ayarlama yapılandırmasına sahiptir. ActiveMQ'yu öne çıkaran bazı özellikler şunlardır:

Yapılandırılabilir Önceden getirme boyutu. Ayarlanabilir diş açma. Yapılandırılabilir yük devretme. Üreticilere yapılandırılabilir idari bildirim. ... ayrıntılar:

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


0

Abie, hepsi sizin kullanım durumunuza geliyor. Bir başkasının kullanım durumunun hesabına güvenmek yerine, kullanım durumunuzu rabbitmq-tartışma listesine göndermekten çekinmeyin. Twitter sormak size bazı yanıtlar alacak. En iyi dileklerimle, alexis


0

ZeroMQ aka 0MQ hakkında, zaten bildiğiniz gibi, size saniyede en fazla mesaj alacak olanı (son kontrol ettiğimde ref sunucusunda saniyede yaklaşık 4 milyon idi), ancak zaten bildiğiniz gibi, dokümantasyon mevcut değil. Nasıl kullanılacağına bakılmaksızın, sunucuları nasıl başlatacağınızı bulmakta zorlanacaksınız. Sanırım kısmen bu yüzden kimse henüz 0MQ hakkında katkıda bulunmadı.

İyi eğlenceler!


11
Zeromq.org/docs:cookbook yemek kitabında örnekler vardır ve bir api.zeromq.org/zmq.html kılavuzu vardır .
Nick

7
zmq hızlı ve kolay bir API'ye sahipken, şunu unutmayın: kalıcılık yok, işlem yok. Hatalı veya yavaş tüketicilerin algılanması yok (mesajlar, üretici programına herhangi bir bildirim yapılmaksızın bırakılır). Sidenote: zmq sunucusuzdur, bu nedenle sunucuları başlatmak için doküman bulamazsınız. Böyle bir şey olsa gerek onlar bir proxy sunucusu var.
nos

0

Ticari uygulamalarla da ilgileniyorsanız, Nirvana'ya kanallarımdan bakmalısınız .

Nirvana, Finansal Hizmetler sektöründe büyük ölçekli düşük gecikmeli ticaret ve fiyat dağıtım platformları için yoğun olarak kullanılmaktadır.

Kurumsal, web ve mobil etki alanlarında çok çeşitli istemci programlama dilleri için destek vardır.

Kümeleme yetenekleri son derece gelişmiş ve şeffaf HA veya yük dengeleme sizin için önemliyse bir göz atmaya değer.

Nirvana indirmek için ücretsizdir.


2
Bunun bir kanalım çalışanından yapılan bir tanıtım olduğunu reddediyor olmalıydı.
Baron Schwartz
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.