ActiveMQまたはRabbitMQまたはZeroMQまたは[終了]


645

ActiveMQとRabbitMQとZeroMQの長所と短所の経験を聞いてみたいと思います。その他の興味深いメッセージキューに関する情報も歓迎します。


2
私はメッセージキューの初心者であり、stackoverflow.com / q / 1035949/181870で実際の使用例について詳しく読んでいました。その後、メッセージキュー(特にJMS)に関連するトピック/記事を検索しているときに、Sun MicrosystemsのJava Message Service API 1.1仕様のオープンソース実装であるOpenJMSに出会いました。私が驚いたのは、それがここでカバー/議論されていないということですか?OpenJMSがこのトピック/ディスカッションに関連しているかどうかをコミュニティに確認したいと思います。関連している場合は、OPに従って、同じの長所と短所での経験が役立つでしょう。
Gnanam 2011

3
3年後、ここを閲覧する人への注意...メッセージキューミドルウェアを使用する理由を考えてください。理由がクラスター内のタスクを分散することである場合は、Celeryを参照してください。MQスタイルのソリューションよりも高いレベルの抽象化で動作し、RabbitMQを使用してメッセージを移動しますが、タスク固有のセマンティクスに対する優れたサポートがあります。
クリスジョンソン

回答:


342

編集:私の最初の答えはAMQPに重点を置いていました。私はそれを書き直して、トピックについてより広い視野を提供することにしました。

これらの3つのメッセージングテクノロジーは、分散システムの構築に異なるアプローチを持っています。

RabbitMQは(Apache Qpidとともに)AMQPプロトコルの主要な実装の1つです。したがって、ブローカーアーキテクチャを実装します。つまり、メッセージはクライアントに送信される前に中央ノードでキューに入れられます。ルーティング、ロードバランシング、永続的なメッセージキューイングなどの高度なシナリオがほんの数行のコードでサポートされているため、このアプローチによりRabbitMQは非常に使いやすく、配備しやすくなります。ただし、中央ノードがレイテンシを追加し、メッセージエンベロープが非常に大きくなるため、スケーラビリティが低下し、「速度が低下」します。

ZeroMqは、金融業界で見られるような高スループット/低遅延のシナリオ用に特別に設計された非常に軽量なメッセージングシステムです。Zmqは多くの高度なメッセージングシナリオをサポートしていますが、RabbitMQとは異なり、フレームワークのさまざまな部分(例:ソケットとデバイス)を組み合わせてそれらのほとんどを自分で実装する必要があります。Zmqは非常に柔軟性がありますが、メッセージを送信するよりも複雑なことができるようになる前に、80ページ程度のガイド(Zmqを使用しない場合でも、分散システムを作成している人は読むことをお勧めします)を学ぶ必要があります2つのピア間。

ActiveMQはその中間にあります。Zmqと同様に、ブローカーとP2Pトポロジーの両方でデプロイできます。RabbitMQと同様に、高度なシナリオを実装する方が簡単ですが、通常は生のパフォーマンスが犠牲になります。それはメッセージングのスイスアーミーナイフです:-)。

最後に、3つの製品すべて:

  • 最も一般的な言語(C ++、Java、.Net、Python、Php、Rubyなど)のクライアントAPIがある
  • 強力なドキュメントがある
  • 積極的にサポートされています

22
本当ですが、AMQPの採用が元の質問と強い相関があるかどうかはわかりません。メッセージキューの選択には、基盤となるワイヤプロトコルよりも重要な考慮事項があると思います。
StaxMan 2010年

8
質問ではAMQPの要求については触れられていませんが、この回答はAMQPに焦点を当てています。JMSを要件として想定すると、答えは基本的に逆になります。ActiveMQが最も人気があり、RabbitMQはおそらく動作するはずのいくつかのサポートを備えています。ワイヤープロトコルが想定されていない場合:他の回答を参照してください。
Fletch

19
RabbitMQとActiveMQで働いたことがあるので、ActiveMQから離れることをお勧めします。リリースは非常にバグが多く、マシンのダウンやメモリリークなどの問題に終わりはありませんでした。一方、RabbitMQは機能します。差し込んだ後は、二度とそれを見る必要はありませんでした。必要なことだけを行います。あなたが好きなら、私は私のブログに簡単なのRabbitMQチュートリアル持っjarloo.com/rabbitmq-c-tutorial
ケリー

2
RabbitMQとActiveMQの求人情報を見ると、RabbitMQの方がはるかに需要が高いようです。ActiveMQはずっと以前から存在していますが、雇用主からもほぼ同じくらい要求されています。

1
ZMQのガイドも本当におもしろくて良い読み物です:)
meawoppl 2013年

174

なぜあなたは逃したスズメムクドリチョウゲンボウアマゾンSQSBeanstalkdカフカIronMQを

メッセージキューサーバー

メッセージキューサーバーは、Erlang(RabbitMQ)、C(beanstalkd)、Ruby(StarlingまたはSparrow)、Scala(Kestrel、Kafka)またはJava(ActiveMQ)のさまざまな言語で利用できます。短い概要はここにあります

すずめ

  • Alex MacCawによって書かれた
  • SparrowはRubyで記述された軽量キューであり、「memcacheを話す」

ムクドリ

チョウゲンボウ

  • Robey Pointerによって書かれました
  • Scalaで記述されたStarlingクローン(RubyからScalaへのStarlingの移植)
  • キューはメモリに保存されますが、ディスクにログオンします

RabbitMQ

  • RabbitMQはErlangのメッセージキューサーバーです
  • ジョブをメモリに保存します(メッセージキュー)

Apache ActiveMQ

  • ActiveMQはJavaのオープンソースメッセージブローカーです

豆の木

Amazon SQS

カフカ

  • ScalaのLinkedInで書かれている
  • LinkedInがすべてのページと他のビューの処理をオフロードするために使用
  • デフォルトでは永続性を使用し、ホットデータにOSディスクキャッシュを使用します(永続性が有効になっている上記のいずれよりもスループットが高くなります)。
  • オンラインとオフラインの両方の処理をサポート

ZMQ

  • 同時実行フレームワークとして機能するソケットライブラリ
  • クラスタ化された製品とスーパーコンピューティングでは、TCPよりも高速
  • インプロセス、IPC、TCP、およびマルチキャスト全体でメッセージを運ぶ
  • ファンアウト、pubsub、パイプライン、要求/応答を介してN対Nを接続します
  • スケーラブルなマルチコアメッセージパッシングアプリの非同期I / O

EagleMQ

  • EagleMQは、オープンソースの高性能で軽量なキューマネージャです。
  • Cで書かれた
  • すべてのデータをメモリに格納し、永続性をサポートします。
  • 独自のプロトコルがあります。キュー、ルート、チャネルでの作業をサポートします。

IronMQ

  • IronMQ
  • 囲碁で書かれた
  • フルマネージドキューサービス
  • クラウドバージョンとオンプレミスの両方で利用可能

これがお役に立てば幸いです。 ソース


この質問のコメント領域でここに尋ねられた私の質問に対して何かアイデア/追加/コメントする予定はありますか-stackoverflow.com/questions/731233/…
Gnanam 2011

競合管理はありますか?私はいつもキューシステムでこの問題を見つけました。たとえば、キュ​​ーが(メモリリソースではなく)要素の数に基づいていっぱいである場合、プロデューサーをブロックします。
sw。

1
queues.io-ここではなく、そこに欠けている詳細を追加することに注意してください。
asyncwait 2013

83

あなたが知りたいよりも多くの情報:

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


更新

Paulがコメントに追加した内容を詳しく説明します。上記のページは2010年を過ぎると死んでしまいますので、少々の塩で読んでください。3年間で多くのものが変更されました。

Wikiページの歴史


7
私はこれらの人がキューについて間違っていると考えていると思います-キューはユーザーごとに1(またはそれ以上)であってはなりません。彼らは自分の仕事をいくつかのキューに入れてから利用するべきです。各ユーザーの受信ボックス(またはmboxes)。
Michael Deardeuff 2010

1
マイケル-もう少し詳しく説明したいですか?問題は、グループチャットベースのシステムでのリアルタイム配信です。私が正しく理解しているのであれば、メッセージのエンドポイント(受信トレイ)としての耐久性のあるストレージメカニズムについて話していますか?もしそうなら、それは請求書に適合しません、彼らはチャットがすぐに配信され、クライアントが直接のサブスクライバーになることを望んでいますか?私が知る限り、トピックベースのキューが大量にあるのは、最適化されたユースケースではありませんか?
Josh

1
更新:そのSecondLife wikiページは2009年に書かれました。すべてのMQの継続的な改善により、2013年までに、彼らが調査したさまざまなメッセージキューについて言及された特定のポイントの多くは最新ではなくなりました。彼らがテストしたMQのほとんどまたはすべては、ある意味で、現在までに改善されています。
ポール・レガート2013

71

それは本当にあなたのユースケースに依存します。

0MQをActiveMQまたはRabbitMQと比較するのは公平ではありません。ActiveMQとRabbitMQは、インストールと管理が必要なメッセージングシステムです。彼らは、ZeroMQよりもはるかに多くの機能を提供します。彼らは実際の永続的なキュー、トランザクションのサポートなどを持っています。

ZeroMQは軽量のメッセージ指向ソケット実装です。また、インプロセス非同期プログラミングにも適しています。ZeroMQを介して「エンタープライズメッセージングシステム」を実行することは可能ですが、自分で多くを実装する必要があります。

そう:

ActiveMQ、RabbitMQ、Websphere MQおよびMSMQは「エンタープライズメッセージキュー」です

ZeroMQはメッセージ指向のIPCライブラリです。


7
複数使用できます。rabbitmq.com/blog/2010/10/18/rabbitmq0mq-bridgeでは、0MQを使用して複数のRabbitMQブローカー間をブリッジし、疎結合の連携を作成する方法について説明しています。
マイケルディロン、

34

RabbitMQとActiveMQの比較はこちらにあります。そのままでは、ActiveMQはメッセージの配信を保証するように構成されています。これにより、信頼性の低いメッセージングシステムと比較して印象が遅くなる可能性があります。必要に応じて、パフォーマンスの設定をいつでも変更して、少なくとも他のメッセージングシステムと同じくらい優れたパフォーマンスを得ることができます。少なくともあなたはそのオプションを持っています。フォーラム、およびスケーリング、パフォーマンス、高可用性の構成に関するActiveMQ FAQには多くの情報があります。また、ActiveMQは、STOMPのような他のワイヤ形式とともに、仕様が確定したときにAMQP 1.0をサポートします。

ActiveMQのもう1つの利点は、Apacheプロジェクトであるため、開発者コミュニティには多様性があり、1つの会社に縛られていません。


22

ActiveMQやRabbitMQは使用していませんが、ZeroMQを使用しています。ZeroMQとActiveMQなどとの大きな違いは、0MQはブローカーがなく、メッセージ配信の信頼性が組み込まれていないことです。多くのメッセージングパターン、トランスポート、プラットフォーム、言語バインディングをサポートする使いやすいメッセージングAPIを探している場合、0MQは一見の価値があります。本格的なメッセージングプラットフォームを探している場合は、0MQが適切ではない可能性があります。

0MQの使用例については、www.zeromq.org / docs:cookbookを参照してください。

電力使用量監視アプリケーションでメッセージパッシングに0MQを正常に使用している(http://rwscott.co.uk/2010/06/14/currentcost-envi-cc128-part-1/を参照)


14

zeroMQを使用しています。シンプルなメッセージパッシングシステムが欲しかったので、ブローカーのような複雑な作業は必要ありません。また、Java指向の巨大なエンタープライズシステムも必要ありません。

高速でシンプルなシステムが必要で、複数の言語をサポートする必要がある場合(私はCと.netを使用しています)、0MQを検討することをお勧めします。


また、C / C ++環境でZMQを使用しています。とても早い。ブローカーパターンの使用。kamailio SIPサーバーのファームのマイクロPMTを実行するリアルタイムVOIPウォッチドッグアプリに最適です。ZMQを使用して非常に洗練されたブローカーを作成できると確信していますが、それに取り組む前にいくつかの追加製品を評価します。

10

私はActiveMQについて2セントしか追加できませんが、これは最も人気のあるものなので、

書きたい言語は重要かもしれません。ActiveMQにはほとんどのクライアントがありますが、C#の実装は、Javaライブラリに比べて完全ではありません。

これは、一部の基本的な機能が不安定で(フェイルオーバープロトコルが...まあ...場合によっては失敗し、再配信のサポートがない)、他の機能は存在しないことを意味します。.NETはプロジェクトにとってそれほど重要ではないように思われるため、開発はかなり遅くなり、リリース計画もないようです。トランクは壊れていることが多いので、これを考慮した場合、先に進めたい場合はプロジェクトへの貢献を検討してください。

次に、多くの優れた機能を備えたActiveMQ自体がありますが、非常に奇妙な問題もいくつかあります。安定性の理由から、activemqのFuse(Progress)バージョンを使用していますが、それでも、覚えておきたい奇妙な「バグ」がいくつかあります。

  • 場合によってはメッセージの送信を停止するブローカー
  • キューを作成するジャーナルエラーは、もはや存在しないメッセージを表示します(コンシューマーに配信されませんが、まだ配信されます)
  • 優先度はまだ実装されていません(人類の登場以来、Issuesリストにあります)
  • などなど

あなたがその問題に耐えることができるならば、それは結局のところ、それはかなり素晴らしい製品です:

A).NETを使用するときに積極的に関与することを恐れない
B)Javaで開発する;-)


5
マイナーアップデート:しばらくの間、KahaDBはActiveMQのデフォルトの永続ストアです。ただし、まったく安定していません。私たちのテストでは、データベースの破損を確認しました(復元可能なものもあれば、約15.000.000のメッセージが発生するものもあります)BEWARE OF THIS
Noctris

8

ZeroMQには実際にはキューがありません。本当に間違いです!キュー、トピック、永続性、何もありません!ソケットAPIのミドルウェアにすぎません。それがあなたが格好良いものなら!そうでなければ忘れてください!activeMQやrabbitmqとは異なります。


8

RabbitMQ ActiveMQとQPIDの機能とパフォーマンスの比較が
http://bhavin.directi.com/rabbitmq-vs-apache-activemq-vs-apache-qpid/にあります

個人的には、上記の3つをすべて試しました。私によると、RabbitMQは賢い最高のパフォーマンスですが、フェイルオーバーとリカバリのオプションはありません。ActiveMQにはほとんどの機能がありますが、速度は遅くなります。

更新: HornetQも調査できるオプションです。JMSベースのソリューションを探している場合、ActiveMQより優れたオプションであるJMS Complaintです。


6

AMQP、Qpid、ZeroMQに関する私の最初の経験についてここに書いています:http ://ron.shoutboot.com/2010/09/25/is-ampq-for-you/

私の主観的な意見では、永続的なメッセージング機能が本当に必要な場合はAMQPが問題なく、ブローカーがボトルネックになっている可能性があることをあまり気にしていません。また、現在C ++クライアントはAMQPに対応していません(Qpidは私のサポートに勝ちませんでしたが、ActiveMQクライアントについては不明です)。それ以外の方法はZeroMQかもしれません。


6

ActiveMQを実稼働環境で約3年間使用しています。仕事が完了するまでの間、正常に動作し、バグのないクライアントライブラリのバージョンを揃えることが問題になる可能性があります。現在、RabbitMQへの移行を検討していた。


5

このブログ投稿のコメントで、Twitterが独自のメッセージキューを作成することについていくつかの議論があります。興味深いかもしれません。

Steveは、ActiveMQ、RabbitMQなどの広範な負荷およびストレステストを行いました。ActiveMQは実際には非常に遅く(Kestrelよりはるかに遅い)、RabbitMQは一貫して、プロデューサーが多すぎてコンシューマーが少なすぎるとクラッシュします。

おそらく最初はTwitterのような負荷はないでしょう:)


5

ActiveMQと同じ数のチューニング構成を持つアプリケーションはほとんどありません。ActiveMQを際立たせるいくつかの機能は次のとおりです。

構成可能なプリフェッチサイズ。構成可能なスレッド。構成可能なフェイルオーバー。プロデューサへの構成可能な管理通知。...詳細:

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


0

Abie、それはすべてあなたのユースケースに帰着します。他の誰かの使用例の説明に頼るのではなく、遠慮なくrabbitmq-discussリストに使用例を投稿してください。Twitterで質問すると、いくつかの回答も得られます。最高の願い、アレクシス


0

ZeroMQ aka 0MQについては、ご存知かもしれませんが、1秒あたりのメッセージ数が最も多くなります(前回チェックしたときに、refサーバーで1秒あたり約400万メッセージ)。ドキュメントは存在しません。サーバーの使用方法はもちろんのこと、サーバーの起動方法を見つけるのも難しいでしょう。これが、0MQについてまだ誰も貢献していない理由の1つだと思います。

楽しんで!


11
クックブックzeromq.org/docs:cookbookに例があり、手動のapi.zeromq.org/zmq.htmlがあります。
Nick

7
zmqは高速で簡単なAPIを備えていますが、これは、永続性やトランザクションがないことを覚えておいてください。使い慣れた、または遅いコンシューマは検出されません(メッセージは単にプロデューサプログラムへの通知なしにドロップされます)。補足:zmqはサーバーレスなので、サーバーを起動するためのドキュメントはありません。ただし、そのようなものが必要な場合は、プロキシサーバーを使用します。

0

商用実装にも関心がある場合は、my-channelsからNirvanaを確認する必要があります

Nirvanaは、金融サービス業界で大規模な低レイテンシトレーディングおよび価格配信プラットフォームに多用されています。

エンタープライズ、ウェブ、モバイルのドメイン全体で、幅広いクライアントプログラミング言語をサポートしています。

透過的なHAまたはロードバランシングが重要である場合、クラスタリング機能は非常に高度であり、一見の価値があります。

Nirvanaは開発目的で無料でダウンロードできます。


2
これはmy-channelsの従業員からの昇進であることの免責事項があったはずです。
シュヴァルツ男爵、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.