ActiveMQ atau RabbitMQ atau ZeroMQ atau [ditutup]

645

Kami akan tertarik untuk mendengar pengalaman apa pun dengan pro dan kontra dari ActiveMQ vs RabbitMQ vs ZeroMQ. Informasi tentang antrian pesan menarik lainnya juga diterima.

Abie
sumber
2
Saya baru mengenal antrian pesan dan sedang membaca lebih lanjut tentang kasus penggunaan nyata di stackoverflow.com/q/1035949/181870 . Kemudian ketika mencari-cari topik / artikel yang berhubungan dengan antrian pesan (khususnya JMS), saya menemukan OpenJMS - sebuah implementasi open source dari Java Message Service API 1.1 Spesifikasi Sun Microsystems. Yang saya kaget adalah tidak dibahas / dibahas di sini? Saya hanya ingin memeriksa dengan komunitas apakah OpenJMS terkait dengan topik / diskusi ini dan jika demikian, sesuai OP, pengalaman dengan pro dan kontra yang sama akan membantu.
Gnanam
3
3 tahun kemudian, catatan untuk orang yang menelusuri di sini ... pikirkan tentang MENGAPA Anda ingin menggunakan middleware antrian pesan. Jika alasannya adalah untuk mendistribusikan tugas dalam sebuah cluster, lihatlah Seledri. Ini beroperasi pada tingkat abstraksi yang lebih tinggi daripada solusi gaya MQ, menggunakan RabbitMQ untuk memindahkan pesan, tetapi memiliki dukungan yang luar biasa untuk semantik khusus tugas.
Chris Johnson

Jawaban:

342

Sunting: Jawaban awal saya memiliki fokus kuat pada AMQP. Saya memutuskan untuk menulis ulang untuk menawarkan pandangan yang lebih luas tentang topik tersebut.

Ketiga teknologi perpesanan ini memiliki pendekatan berbeda dalam membangun sistem terdistribusi:

RabbitMQ adalah salah satu implementasi utama protokol AMQP (bersama dengan Apache Qpid). Oleh karena itu, ia mengimplementasikan arsitektur broker, yang berarti bahwa pesan diantrekan pada simpul pusat sebelum dikirim ke klien. Pendekatan ini membuat RabbitMQ sangat mudah digunakan dan digunakan, karena skenario lanjutan seperti perutean, penyeimbangan muatan, atau antrian pesan persisten didukung hanya dalam beberapa baris kode. Namun, itu juga membuatnya kurang terukur dan "lebih lambat" karena simpul pusat menambahkan latensi dan amplop pesan cukup besar.

ZeroMq adalah sistem pesan yang sangat ringan yang dirancang khusus untuk skenario throughput tinggi / latensi rendah seperti yang dapat Anda temukan di dunia keuangan. Zmq mendukung banyak skenario perpesanan tingkat lanjut tetapi bertentangan dengan RabbitMQ, Anda harus mengimplementasikan sendiri sebagian besar dari itu dengan menggabungkan berbagai bagian kerangka kerja (mis. Soket dan perangkat). Zmq sangat fleksibel tetapi Anda harus mempelajari 80 halaman atau lebih dari panduan ini (yang saya sarankan membaca untuk siapa pun yang menulis sistem terdistribusi, bahkan jika Anda tidak menggunakan Zmq) sebelum dapat melakukan sesuatu yang lebih rumit daripada mengirim pesan. antara 2 rekan.

ActiveMQ berada di jalan tengah. Seperti Zmq, ini dapat digunakan dengan topologi broker dan P2P. Seperti RabbitMQ, lebih mudah untuk menerapkan skenario lanjutan tetapi biasanya dengan biaya kinerja mentah. Ini adalah pisau pengiriman pesan tentara Swiss :-).

Akhirnya, ketiga produk:

  • memiliki apis klien untuk bahasa yang paling umum (C ++, Java, .Net, Python, Php, Ruby, ...)
  • punya dokumentasi yang kuat
  • didukung secara aktif
Julien
sumber
22
Meskipun benar, saya tidak yakin apakah adopsi AMQP memiliki korelasi kuat dengan pertanyaan awal. Saya akan berpikir ada pertimbangan lebih penting untuk pilihan seseorang dari antrian pesan daripada apa yang mendasari protokol kawat yang digunakannya.
StaxMan
8
Pertanyaannya tidak menyebutkan membutuhkan AMQP, tetapi jawaban ini difokuskan pada AMQP. Jika kita menganggap JMS sebagai persyaratan maka jawabannya pada dasarnya akan menjadi sebaliknya: ActiveMQ paling populer, RabbitMQ memiliki beberapa dukungan yang mungkin harus bekerja. Jika tidak ada protokol kawat yang diasumsikan: lihat jawaban lain.
Fletch
19
Setelah bekerja di RabbitMQ dan ActiveMQ, saya sarankan Anda menjauh dari ActiveMQ. Rilisnya sangat buggy, dan saya tidak punya masalah dengan mesin turun dan kebocoran memori dll ... RabbitMQ di sisi lain hanya berfungsi. Setelah saya menancapkannya, saya TIDAK PERNAH melihatnya lagi. Itu hanya melakukan apa yang perlu. Jika Anda suka, saya punya tutorial RabbitMQ sederhana di blog saya jarloo.com/rabbitmq-c-tutorial
Kelly
2
Setelah melihat posting pekerjaan untuk RabbitMQ versus ActiveMQ, RabbitMQ tampaknya jauh lebih laris. ActiveMQ telah ada lebih lama tetapi diminta oleh pengusaha hampir sama.
1
Panduan untuk ZMQ juga sangat lucu dan enak dibaca :)
meawoppl
174

Mengapa Anda merindukan Sparrow , Starling , Kestrel , Amazon SQS , Beanstalkd , Kafka , IronMQ ?

Server Antrian Pesan

Server antrian pesan tersedia dalam berbagai bahasa, Erlang (RabbitMQ), C (beanstalkd), Ruby (Starling atau Sparrow), Scala (Kestrel, Kafka) atau Java (ActiveMQ). Tinjauan singkat dapat ditemukan di sini

Burung gereja

  • ditulis oleh Alex MacCaw
  • Sparrow adalah antrian ringan yang ditulis dalam Ruby yang “berbicara memcache”

Jalak

Kestrel

  • ditulis oleh Robey Pointer
  • Klon Starling ditulis dalam Scala (pelabuhan Starling dari Ruby ke Scala)
  • Antrian disimpan dalam memori, tetapi dicatat pada disk

RabbitMQ

  • RabbitMQ adalah Server Antrian Pesan di Erlang
  • menyimpan pekerjaan dalam memori (antrian pesan)

Apache ActiveMQ

  • ActiveMQ adalah broker pesan sumber terbuka di Jawa

Beanstalkd

Amazon SQS

Kafka

  • Ditulis di LinkedIn di Scala
  • Digunakan oleh LinkedIn untuk membongkar pemrosesan semua halaman dan tampilan lainnya
  • Default untuk menggunakan kegigihan, menggunakan cache disk OS untuk data panas (memiliki throughput yang lebih tinggi dari yang di atas memiliki kegigihan diaktifkan)
  • Mendukung keduanya on-line sebagai pemrosesan off-line

ZMQ

  • Perpustakaan soket yang bertindak sebagai kerangka kerja konkurensi
  • Lebih cepat dari TCP, untuk produk-produk yang dikelompokkan dan superkomputer
  • Membawa pesan melintasi inproc, IPC, TCP, dan multicast
  • Hubungkan N-to-N melalui fanout, pubsub, pipeline, request-reply
  • Asynch I / O untuk aplikasi lintas-pesan multicore yang dapat diskalakan

EagleMQ

  • EagleMQ adalah open source, manajer kinerja tinggi dan antrian ringan.
  • Ditulis dalam C
  • Menyimpan semua data dalam memori dan mendukung kegigihan.
  • Ia memiliki protokolnya sendiri. Mendukung pekerjaan dengan antrian, rute dan saluran.

IronMQ

  • IronMQ
  • Ditulis dalam Go
  • Layanan antrian yang dikelola sepenuhnya
  • Tersedia baik sebagai versi cloud dan di tempat

Saya berharap ini akan bermanfaat bagi kita. sumber

Andrei Andrushkevich
sumber
Apakah Anda punya ide / pemikiran untuk menambah / mengomentari pertanyaan saya yang diajukan di area komentar pertanyaan ini di sini - stackoverflow.com/questions/731233/… ?
Gnanam
Apakah mereka memiliki manajemen pertengkaran? Saya selalu menemukan masalah ini dengan sistem antrian. Misalnya memblokir produser jika antrian penuh berdasarkan jumlah elemen (bukan pada sumber daya memori).
sw.
1
queues.io - Pikiran untuk menambahkan detail yang hilang di sana vs. di sini.
asyncunggu
83

Lebih banyak informasi daripada yang ingin Anda ketahui:

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


MEMPERBARUI

Hanya menguraikan apa yang ditambahkan Paulus dalam komentar. The halaman yang disebutkan di atas sudah mati setelah 2010, sehingga membaca dengan sedikit garam. Banyak hal telah diubah dalam 3 tahun.

Sejarah Halaman Wiki

FlySwat
sumber
7
Saya pikir orang-orang ini berpikir tentang antrian yang salah - antrian tidak boleh 1 (atau lebih) per pengguna. Mereka harus menempatkan pekerjaan mereka dalam beberapa antrian dan kemudian memanfaatkannya. inbox (atau mboxes) untuk setiap pengguna.
Michael Deardeuff
1
Michael - ingin menguraikan lebih sedikit? Masalahnya adalah pengiriman real-time dalam sistem berbasis grup obrolan. Jika saya memahami dengan benar, Anda berbicara tentang mekanisme penyimpanan yang tahan lama untuk pesan sebagai titik akhir (kotak masuk)? Jika demikian, maka itu tidak sesuai dengan tagihan, mereka ingin obrolan disampaikan segera, dan klien menjadi pelanggan langsung? Sejauh yang saya tahu memiliki banyak antrian berdasarkan topik bukan kasus penggunaan yang dioptimalkan?
Josh
1
Pembaruan: Halaman wiki SecondLife itu ditulis pada tahun 2009. Pada saat ini, pada tahun 2013, banyak poin spesifik yang disebutkan tentang antrian pesan yang berbeda yang mereka selidiki tidak lagi mutakhir, karena peningkatan yang berkelanjutan di semua MQ. Sebagian besar atau semua MQ yang mereka uji lebih baik, dalam beberapa hal, sekarang.
Paul Legato
71

Itu benar-benar tergantung pada kasus penggunaan Anda.

Membandingkan 0MQ dengan ActiveMQ atau RabbitMQ tidak adil. ActiveMQ dan RabbitMQ adalah Sistem Pesan yang memerlukan instalasi dan administrasi. Mereka menawarkan lebih banyak fitur daripada ZeroMQ. Mereka memiliki Antrian persisten yang nyata, Dukungan untuk transaksi dll.

ZeroMQ adalah implementasi soket berorientasi pesan yang ringan. Ini juga cocok untuk pemrograman asinkron dalam-proses. Dimungkinkan untuk menjalankan "Enterprise Messaging System" di atas ZeroMQ, tetapi Anda harus banyak menerapkannya sendiri.

Begitu:

ActiveMQ, RabbitMQ, Websphere MQ & MSMQ adalah "Antrian Pesan Perusahaan"

ZeroMQ adalah pustaka IPC yang berorientasi pada pesan.

sanosdole
sumber
7
Anda dapat menggunakan lebih dari satu. rabbitmq.com/blog/2010/10/18/rabbitmq0mq-bridge berbicara tentang bagaimana Anda dapat menggunakan 0MQ untuk menjembatani antara beberapa broker RabbitMQ dan membuat federasi yang digabungkan secara longgar.
Michael Dillon
34

Ada perbandingan antara RabbitMQ dan ActiveMQ di sini . Di luar kotak, ActiveMQ dikonfigurasi untuk menjamin pengiriman pesan - yang dapat memberikan kesan lambat dibandingkan dengan sistem pesan yang kurang andal. Anda selalu dapat mengubah konfigurasi untuk kinerja jika Anda menginginkan dan mendapatkan setidaknya kinerja sebaik sistem pesan lainnya. Setidaknya Anda memiliki opsi itu. Ada banyak informasi di forum dan FAQ ActiveMQ untuk konfigurasi untuk penskalaan, kinerja, dan ketersediaan tinggi. ActiveMQ juga akan mendukung AMQP 1.0 ketika spec diselesaikan, bersama dengan format kawat lainnya, seperti STOMP.

Kelebihan lain untuk ActiveMQ adalah proyek Apache, jadi ada keragaman di komunitas pengembang - dan tidak terikat pada satu perusahaan.

Rob Davies
sumber
22

Saya belum pernah menggunakan ActiveMQ atau RabbitMQ tetapi telah menggunakan ZeroMQ. Perbedaan besar seperti yang saya lihat antara ZeroMQ dan ActiveMQ dll. Adalah bahwa 0MQ adalah tanpa broker dan tidak memiliki keandalan untuk pengiriman pesan. Jika Anda mencari API perpesanan yang mudah digunakan yang mendukung banyak pola perpesanan, pengangkutan, platform, dan pengikatan bahasa, maka 0MQ sangat layak untuk dilihat. Jika Anda mencari platform pengiriman pesan yang penuh sesak maka 0MQ mungkin tidak sesuai dengan tagihan.

Lihat www.zeromq.org/docs:cookbook untuk banyak contoh tentang bagaimana 0MQ dapat digunakan.

Saya seorang yang sukses menggunakan 0MQ untuk menyampaikan pesan dalam aplikasi pemantauan penggunaan listrik (lihat http://rwscott.co.uk/2010/06/14/currentcost-envi-cc128-part-1/ )

Bob Scott
sumber
14

Saya menggunakan zeroMQ. Saya menginginkan sistem penyampaian pesan yang sederhana dan saya tidak memerlukan kerumitan broker. Saya juga tidak ingin sistem perusahaan berorientasi Java besar.

Jika Anda menginginkan sistem yang cepat dan sederhana dan Anda perlu mendukung banyak bahasa (saya menggunakan C dan .net) maka saya akan merekomendasikan untuk melihat 0MQ.

Nick
sumber
Juga menggunakan ZMQ di lingkungan C / C ++. Sangat cepat. Menggunakan pola broker. Sangat cocok untuk aplikasi watch-dog VOIP waktu-nyata kami yang melakukan micro-pmts untuk pertanian server SIP kamailio. Cukup yakin saya bisa menulis broker yang sangat canggih menggunakan ZMQ, tetapi akan mengevaluasi beberapa produk tambahan sebelum berkomitmen untuk itu.
10

Saya hanya dapat menambahkan 2 sen tentang ActiveMQ tetapi karena ini adalah salah satu yang paling populer:

Bahasa yang ingin Anda tulis mungkin penting. Meskipun ActiveMQ memang memiliki klien untuk sebagian besar, implementasi C # mereka jauh dari lengkap dibandingkan dengan Perpustakaan Java.

Ini berarti beberapa fungsi dasar tidak jelas (protokol gagal-alih yang ... yah ... gagal dalam beberapa kasus, tidak ada dukungan pengiriman ulang) dan lainnya tidak ada. Karena .NET tampaknya tidak terlalu penting untuk proyek, pengembangan agak lambat dan sepertinya tidak ada rencana rilis. Bagasi sering rusak sehingga jika Anda mempertimbangkan ini, Anda mungkin ingin mempertimbangkan untuk berkontribusi pada proyek jika Anda ingin hal-hal yang akan dilanjutkan.

Lalu ada ActiveMQ itu sendiri yang memiliki banyak fitur bagus tetapi beberapa masalah yang sangat aneh juga. Kami menggunakan versi Fuse (Progress) dari activemq untuk alasan stabilitas tetapi meskipun begitu ada beberapa "bug" aneh yang ingin Anda ingat:

  • Pialang yang berhenti mengirim pesan dalam beberapa kesempatan
  • Jurnal Kesalahan membuat antrian menunjukkan pesan yang tidak ada lagi (mereka tidak dikirimkan ke konsumen tetapi masih)
  • Prioritas masih belum diterapkan (ada dalam daftar Masalah sejak awal jenis manusia)
  • dll. dll

Semua dan semua, itu adalah produk yang cukup bagus JIKA Anda bisa hidup dengan masalah-masalahnya:

A) tidak takut untuk terlibat aktif saat menggunakan .NET
B) berkembang di java ;-)

Noctris
sumber
5
Pembaruan Kecil: Sejak beberapa saat, KahaDB adalah toko persistensi default untuk ActiveMQ. Namun: sama sekali tidak stabil. Dalam pengujian kami, kami telah melihat kerusakan basis data (beberapa dapat dipulihkan, yang lain menelan biaya sekitar 15.000.000 pesan) WASPADALAH INI
Noctris
8

ZeroMQ benar-benar dengan nol antrian! Ini benar-benar kesalahan! Itu tidak memiliki antrian, topik, kegigihan, tidak ada! Ini hanya middleware untuk sockets API. Jika itu yang Anda cari keren! kalau tidak lupakan saja! tidak seperti activeMQ atau rabbitmq.

Angek
sumber
8

Ada perbandingan fitur dan kinerja RabbitMQ ActiveMQ dan QPID yang diberikan di
http://bhavin.directi.com/rabbitmq-vs-apache-activemq-vs-apache-qpid/

Secara pribadi saya sudah mencoba ketiga hal di atas. RabbitMQ adalah kinerja terbaik menurut saya, tetapi tidak memiliki opsi failover dan pemulihan. ActiveMQ memiliki sebagian besar fitur, tetapi lebih lambat.

Pembaruan: HornetQ juga merupakan opsi yang dapat Anda lihat, itu adalah JMS Complaint, opsi yang lebih baik daripada ActiveMQ jika Anda mencari solusi berbasis JMS.

sheki
sumber
6

Saya menulis tentang pengalaman awal saya mengenai AMQP, Qpid, dan ZeroMQ di sini: http://ron.shoutboot.com/2010/09/25/is-ampq-for-you/

Pendapat subyektif saya adalah bahwa AMQP baik-baik saja jika Anda benar-benar membutuhkan fasilitas perpesanan yang persisten dan tidak terlalu khawatir bahwa broker mungkin menjadi penghambat. Juga, klien C ++ saat ini tidak ada untuk AMQP (Qpid tidak memenangkan dukungan saya; namun tidak yakin tentang klien ActiveMQ), tetapi mungkin sedang dalam proses. ZeroMQ mungkin sebaliknya.

ron
sumber
6

Saya telah menggunakan ActiveMQ dalam lingkungan produksi selama sekitar 3 tahun sekarang. Sementara itu menyelesaikan pekerjaan, berbaris versi pustaka klien yang berfungsi dengan baik dan bebas bug bisa menjadi masalah. Sedang mencari transisi ke RabbitMQ.

Kelly
sumber
5

Ada beberapa diskusi di komentar posting blog ini , tentang Twitter menulis antrian pesan mereka sendiri, yang mungkin menarik.

Steve melakukan pengujian beban berat dan stress pada ActiveMQ, RabbitMQ, dll. ActiveMQ sebenarnya cukup lambat (jauh lebih lambat dari Kestrel), RabbitMQ secara konsisten crash dengan terlalu banyak produsen dan terlalu sedikit konsumen.

Anda mungkin tidak akan memiliki muatan seperti Twitter pada awalnya :)

crb
sumber
5

Beberapa aplikasi memiliki konfigurasi penyetelan sebanyak ActiveMQ. Beberapa fitur yang membuat ActiveMQ menonjol adalah:

Ukuran Prefetch yang dapat dikonfigurasi. Threading yang bisa dikonfigurasi Kegagalan yang bisa dikonfigurasi. Pemberitahuan administratif yang dapat dikonfigurasi untuk produsen. ... detail di:

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

cobrien
sumber
0

Abie, semuanya tergantung pada kasus penggunaan Anda. Daripada mengandalkan akun orang lain dari kasus penggunaan mereka, jangan ragu untuk memposting kasus penggunaan Anda ke daftar rabbitmq-mendiskusikan. Bertanya di twitter akan memberi Anda beberapa tanggapan juga. Salam hangat, Alexis


sumber
0

Tentang ZeroMQ alias 0MQ, karena Anda mungkin sudah tahu, itu yang akan memberi Anda pesan terbanyak per detik (terakhir sekitar 4 juta per detik di server ref mereka terakhir kali saya periksa), tetapi karena Anda mungkin juga sudah tahu, dokumentasi tidak ada. Anda akan kesulitan menemukan cara memulai server, apalagi cara menggunakannya. Saya kira itu sebagian mengapa belum ada yang berkontribusi tentang 0MQ.

Selamat bersenang-senang!

Charle
sumber
11
Ada contoh di buku masak zeromq.org/docs:cookbook dan ada manual api.zeromq.org/zmq.html .
Nick
7
sementara zmq cepat dan memiliki api yang mudah, ingatlah ini: tidak ada kegigihan, tidak ada transaksi. Tidak ada pendeteksian konsumen yang lemah atau lambat (pesan-pesan mudah hilang tanpa pemberitahuan ke program produsen). Sidenote: zmq tidak memiliki server, jadi Anda tidak akan menemukan dokumen untuk memulai server. Mereka memang memiliki server proxy jika Anda membutuhkan sesuatu seperti itu.
nos
0

Jika Anda juga tertarik dengan implementasi komersial, Anda harus melihat Nirvana dari saluran saya .

Nirvana banyak digunakan dalam industri Jasa Keuangan untuk skala besar perdagangan latensi rendah dan platform distribusi harga.

Ada dukungan untuk berbagai bahasa pemrograman klien di perusahaan, web, dan domain seluler.

Kemampuan pengelompokan sangat canggih dan layak dilihat jika HA atau penyeimbangan beban transparan penting bagi Anda.

Nirvana dapat diunduh gratis untuk tujuan pengembangan.

eddie mcdaid
sumber
2
Seharusnya ini memiliki penafian bahwa ini adalah promosi dari karyawan saluran saya.
Baron Schwartz