web-dev-qa-db-ja.com

ActiveMQからRabbitMQへの切り替え

現在、メッセージングのニーズにActiveMQを使用しています。いくつかのdbの障害は別として、うまくいきました。ただし、少なくともRabbitMQを試すことを検討しています。しかし、その前に、次のことを理解したいと思います。

  1. RabbitMQとActiveMQの違いは何ですか? RabbitMQはActiveMQよりも優れているか悪いのですか?
  2. それに比べて、RabbitMQの設定はどれほど簡単/困難ですか?
  3. RabbitMQはSpringとどの程度統合されていますか?
    • ActiveMQでは、接続ファクトリーBeanをJmsTemplateに配線し、DefaultMessageListener Beanを使用してキューをそれぞれのハンドラーに接続します。 RabbitMQでも基本的に同じことができますか?
50
sjac

AMQPは、メッセージ指向ミドルウェア(MOM)のアプリケーションレベルの標準です。 JMSは、MOMと通信するためのJavaの標準APIです。

2つの異なるJava JMSを使用するアプリケーションは異なるMOMを使用しているため、通信できません。ActiveMQは、Javaプログラムを許可するJMSライブラリを備えたMOMシステムJMSを使用してアクセスしますが、必ずしもWebLogic MOMなどを使用して別のJMS Javaプログラムと通信できるわけではありません。

AMQPは、たとえばSMTPと同じラインに沿った標準であるため、異なるAMQP MOMシステムは互いに相互運用できます(同じバージョンのAMQPを使用している場合)。 AMQP MOMシステムがそのJavaクライアントにJMSライブラリを提供できなかった理由はありません。たとえば、SwiftMQはJMS APIを提供し、AMQP 1.0を使用します。

残念ながら、すべてのAMQPシステム(および多数あります)がAMQPのバージョン1.0をまだ使用しているわけではありません。 RabbitMQ(この記事の執筆時点)は、AMQP 1.0サポートをまだ提供していません。他のAMQPシステムにはApache QPIDとStormMQがありますが、他にもたくさんあります。これらのすべてがAMQP 1.0をサポートしたら、それらはすべて相互運用可能になります。

ActiveMQのサイトで http://activemq.Apache.org/amqp.html で、ActiveMQは次のように述べています。 AMQPを実装していません。」 AMQP 1.0がリリースされたので、ActiveMQからそれをサポートする時期についてのこれ以上のWordはありません。

8
JavaGP

RabbitMQはAMQPブローカーであり、構成の大部分はAMQP自体を介して処理されるため、質問のほとんどは意味がありません。

RabbitMQの厄介な問題の1つは、多くのOSパッケージが1.72であり、これが非常に古いことです。 RabbitMQ 2.51の.debまたは.rpmパッケージをサイトから直接入手する方がはるかに良いでしょう。その後、AMQP以外で本当に必要な設定は、rabbitmqctlを使用して仮想ホストとユーザー権限を作成することだけです。または、RabbitMQを再起動する前に、Web管理コンソールの.ezプラグインをダウンロードして正しいディレクトリに配置することもできます。 2.51を使用している場合はこのWeb管理コンソールを強くお勧めしますが、DebianとUbuntuがサドルを使用しているデフォルトの1.72に固執している場合は不可能です。

RabbitMQを実行したら、任意の言語とAMQPライブラリを使用できます。私は個人的にpika、amqplib、kombuを使用するPythonシステムを引き継ぎました。現在、SighaのhaighaとJava AMQP(そしてもちろんMQブローカー)を介してお互いに。

6
Michael Dillon

JMS/AMQPの概念を比較してActiveMQとRabbitMQを比較することは最も重要ではありません。ActiveMQはAMQPを話し、商用版にはRabbitMQ用のJMSクライアントがあります(vFabric RabbitMQと呼ばれていました)。しかし、いくつかのユースケースでは、AMQPの概念(ルーティングキー)が役立つ場合があります。

私は両方を使用し、両方が好きです:

  • Erlang + RabbitMQは、Java + ActiveMQよりも一部のシステム(古いパッケージリポジトリ)にインストールするのが難しいことがわかりました。
  • RabbitMQには、いくつかのNiceクラスタリング/ HAオプション(ミラー化されたキュー、クラスターフェデレーション)があります。共有ZooKeeperや共有データベースは必要ありませんが、「スプリットブレイン」問題に対処する必要があります。
  • ActiveMQはより重い(メモリ消費)
  • ActiveMQはApache Camelと完全に統合されており、RabbitMQではSpring Integrationを使用した方がよいでしょう(Camel RabbitMQ/AMQPは少し粗い)
  • ActiveMQはXAトランザクションをサポートし、Javaアプリケーションに埋め込むことができ、Camelを埋め込むことができます。
  • ActiveMQを使用したJava自動テストの方が簡単です(組み込みブローカー)
3
G Quintana