RabbitMQ 事始め - 基礎編 -

ちょっと仕事で使うかもーということで、
いろいろ調べてみました。

http://www.rabbitmq.com

オープンソースのMQとしては、ActiveMQとか、ZeroMQとかもありますが、
RabbitMQが一番バランスがとれていたよいみたい。
たしかに、ドキュメントがとっても充実していて助かりました。
英語ではありますが、読みやすい英語です。

ちなみに、RabbitMQはVMWareがバックアップしています。
ここもポイントですかね。

あと、このへんがざっくりとどのソフトを選ぶか参考になりました。
http://d.hatena.ne.jp/wivlog/searchdiary?word=%2A%5BMQ%5D


とはいえ、英語でドキュメントを読むのがおっくうな人たちもいると思うので、
こんなけ知ってれば大丈夫でしょ!ってな感じでドキュメントを超訳して行こうかと思います。


ではではスタート!

RabbitMQはErlangで記述された信頼性の高いオープンソースのメッセージキューイングシステムです。
通常TCPの5672 ポートを使用して、メッセージのやり取りを行います。
メッセージングキューイングシステムは大きく下記の構成要素で成立します。

メッセージを送信するクライアントのこと。
AMQPの仕様にしたがって、メッセージキューを送信します。
クライアントはExchangeやQueueを指定してメッセージを送信できます。
また、指定せずに一時的なExchangeやQueueをプログラム上で宣言し利用することも
できますが、ExchangeとQueueのバインディングを含めてプログラム上で
設定する必要があります。

ようするに、java clientで作ったメッセージを送るクライアントアプリ全般のことですね。

  • Exchange

Publisherからメッセージを受け取ります。
RabbitMQサーバ上に存在し、Publisherから受けとったメッセージを
適切なQueueに配送します。

配送ルール(バインディング)は以下で説明するExchangeのタイプによって
さまざまな指定が可能で、それぞれでQueueへのバインディングの仕方は特徴を持ちます。

また、durableかそうでないかの属性を持ち、
durableでない場合、サーバを再起動するとそのExchangeは失われます。

これは、RabbitMQの内部で持つコンポーネントです。
java clientから作成したり、管理コンソールからも作成できます。

  • Queue

Exchangeからメッセージがたまる場所です。
任意のExchangeからバインディングされることでメッセージを
キューとしてためていきます。

Exchangeと同様、durableかそうでないかの属性をもち、
durableでない場合、サーバを再起動するとそのキューは失われます。
そのため、キューにたまったメッセージまでも失われることになるので、
基本的にはdurableで運用します。

これもExchangeと同様にRabbitMQ側に定義されるものです。

  • Consumer

キューからメッセージを取得しその内容にしたがって
処理を行うクライアントです。
Publisherと同様任意のプログラム言語で作成し、
処理を行います。

  • Message

実際にやりとりされるメッセージ自体で、
Publisherによって生成され、ブローカー(Exchange/Queue)で
ルーティングし、Consumerで消費されます。

また、メッセージ毎にルーティングキーを設定でき
そのキーによって、どのキューに配送するかといったバインディング設定を行います。

ここのメッセージには、下記のような基本プロパティが設定できます。
例えば、delivery modeを2に設定すると、サーバを再起動した場合でも
そのメッセージはキューに残り続けます。

contentType, contentEncoding, headers, deliveryMode,
priority, correlationId, replyTo, expiration,
messageId, timestamp, type, userId,
appId, clusterId


このあたりは、パフォーマンスに影響が出るところでもあるので、
後ほど詳しく説明しようと思います。


配送ルール(バインディング)

                                                      • -

Exchangeのタイプによってキューに対する
さまざまな配送ルールを設けることができます。

つまりは、とあるExchangeに送られたメッセージをどのキューに結びつけるか
をルール付けすることを指します。

静的に定義することもできますし、動的にクライアントプログラムで作成する事もできます。


基礎編としては上記、基本的な構成要素を理解しておけばよいでしょう!

ではまた来週!
次は個々の詳しい説明を超訳していきます。