http://www.rabbitmq.com/tutorials/tutorial-one-java.html の翻訳記事 +α です。
一部、補足的な内容も入れてます。
大体意味はあっていると思いますが、参考程度に!
Introduction
RabbitMQ は Advanced Message Queuing Protocol (以後 AMQP) に従って、
送信者側 (以後 Producer) からメッセージを受信し、受信者側 (以後 Consumer) に中継するプログラムです。
RabbitMQ は、キューを持っており、任意の名前を付けることができます。
RabbitMQ の中に複数のキューを作ることができます。
キューは Producer から受信したメッセージを格納します。
複数の Producers は、ひとつのキューにメッセージを格納できます。
複数の Consumers は、ひとつのキューからメッセージの受信を試せます。
How to Install
CentOS 5.x でのインストールサンプルです。
DAG レポジトリから erlang をインストールし、RabbitMQ をインストールします。
この環境でインストールされる erlang は少し古いものですので、運用環境では適切な erlang をソースからインストールすることをお勧めします。
RabbitMQ を起動し、デフォルトポート 5672 でリクエストを待機します。
http://gist.github.com/1757613
Hello World
Producer がメッセージをキューに格納し、Consumer がメッセージを受信するサンプルです。
Producer はメッセージを 1 件送信し、Consumer が複数のメッセージを受信し標準出力します。
今回は取り掛かりとして一番シンプルな方法で示します。
Sending
メッセージをキューに格納するプログラムを Send とします。
Send は 1 件のメッセージを送信するプログラムです。
これから Send を抜粋して説明していきます。
なお、Send の全てのソースコードは、下記から閲覧できます。
http://github.com/rabbitmq/rabbitmq-tutorials/blob/master/java/Send.java
必要なクラスをインポートします。
1758838
キューを宣言します。
キューの名前、および性質 (永続制、排他性、...etc) を指定します。
1758841
RabbitMQ サーバに接続します。
RabbitMQ が提供するコネクションクラスはソケット通信を抽象化しています。
具体的には、プロトコルのネゴシエーションと認証を行い、次にチャンネルを生成します。
このチャンネルを使って API の殆どの処理を行っています。
1758850
メッセージを送信します。
まず、メッセージを格納するキューを宣言する必要があります。
キューの宣言は巾等性 (idempotent) であり、何回行っても結果は同じです。
具体的には、もし宣言されたキューが存在しない場合のみ生成されます。
メッセージはバイト配列で渡すため、どのような内容でもエンコードできます。
1758890
生成したコネクションを閉じます。
1758938
Receiving
メッセージをキューから受信するプログラムを Recv とします。
Send は 1 つのメッセージを送信しますが、Recv は複数のメッセージを受信できます。
これから Recv を抜粋して説明していきます。
なお、Recv の全てのソースコードは、下記から閲覧できます。
http://github.com/rabbitmq/rabbitmq-tutorials/blob/master/java/Recv.java
必要なクラスをインポートします.
追加された QueueingConsumer は、サーバにプッシュされたメッセージをバッファするために使用します.
1759068
最初は Send と似ています。
まずコネクションを開き、チャンネルを生成し、利用する予定のキューを宣言します。
Send が利用するキューと一致するキューであることに注意してください。
また Recv でも Send と同様にキューを宣言していることに注意してください。
なぜなら、Send する前に Recv をはじめても良いので、キューが存在するかを確かめる必要があるからです.
1759172
キューから受信したメッセージを Recv に運ぶようにサーバに命じます。
メッセージの受信は非同期に処理されます。
そのため、メッセージを使用する準備ができるまでバッファを行うコールバックオブジェクトを提供します。
そのコールバックオブジェクトが QueueingConsumer です。
QueueingConsumer.nextDelivery() は別のメッセージが届くまで待機します。
1759738
補足
Recv は Send が RabbitMQ に送ったメッセージを受け取るたびに標準出力します.
Recv はメッセージの受信を待機し続ける (終了するには Ctrl+C を送る) ので、別のターミナルから Send をスタートしてください。
もしキューを確認したい場合は、RabbitMQ の "rabbitmqctl list_queues" コマンドを実行してください.
次の part 2 では、Simple Work Queue を紹介します。