wkzk's blog

なんか消去法的に、もしくはブログであることを求められてるときに書くかもしれないブログ。

rabbitmqでチュートリアルをうごかす

とにもかくにもサーバいれる

https://www.rabbitmq.com/install-mac.html
(ソースからやる場合はこちら。https://www.rabbitmq.com/build-server.html
インストール手順はこのまま。erlangはもともといれてたので。あとはrabbitmq-serverをおとします。

curl -O http://www.rabbitmq.com/releases/rabbitmq-server/v2.8.7/rabbitmq-server-2.8.7.tar.gz
tar xvzf amqp_client-2.8.7-src.tar.gz 
sudo TARGET_DIR=/opt/local/rabbitmq SBIN_DIR=/opt/local/rabbitmq/sbin/ MAN_DIR=/opt/local/rabbitmq/man make install

pythonやれxsltprocやれ必要なので事前になにも入ってない人は先にそっちをいれるべし。で、もう動かせそうだけど、rabbitmq-serverの設定まわりをちょっと変えます

https://www.rabbitmq.com/configure.html
にまるっとかいてあるけど、要は設定ファイルは2つ。env用とconfig用。envを以下の記述だけにして/etc/rabbitmq/rabbitmq-env.confとして保存。

NODENAME=waki-rabbit
#CONFIG_FILE=/etc/rabbitmq/wkzk
MNESIA_BASE=/Users/wkzk/rabbit-mnesia

nodenameがデフォだどhostnameからひっぱってくるようなので明示的に指定したのと、rabbitmq-serverを起動する際にmnesiaのDBが必要なので、それの置き場所を指定しました。

で、あとは起動するだけ。

sbin/rabbitmq-server -detached

ってすると

wakimac:rabbitmq wakizaka$ sbin/rabbitmq-server -detached
Activating RabbitMQ plugins ...
0 plugins activated:

って感じで地味にバックグラウンドで起動します。止めるときには

sbin/rabbitmqctl stop

だって。

実行したときのログはデフォで/var/log/rabbitmq下に出力されて、さっき明示的に指定したNODENAMEがログファイル名でつかわれます。saslのログもあわせて二つ作られます。

クライアントいれる

メッセージング送受信でクライアントが必要なので入れます。せっかくのAMQPなのでerlang clientで送信して、javaで受信する言語をまたいで動作確認することにします。

https://www.rabbitmq.com/erlang-client.html
で、てっとりばやくうごかしたかったのでコンパイル済のezファイル2つがあったので、それだけおとします。

wget http://www.rabbitmq.com/releases/rabbitmq-erlang-client/v2.7.0/rabbit_common-2.7.0.ez
unzip rabbit_common-2.7.0.ez
ln -s rabbit_common-2.7.0 rabbit_common

wget http://www.rabbitmq.com/releases/rabbitmq-erlang-client/v2.7.0/amqp_client-2.7.0.ez
unzip amqp_client-2.7.0.ez
ln -s amqp_client-2.7.0 amqp_client

erlang clientのチュートリアルはgithubから拝借します。
https://github.com/rabbitmq/rabbitmq-tutorials/tree/master/erlang
send.erlがあるので、ぱくってこれをこのまま動かします。escriptなのでshellと同じのりでそのまま実行ですね。

wakimac:~ wkzk$ ./send.erl 
 [x] Sent 'Hello World!'

で送信されたっぽいです。次にjava側で受信します。java clientはmaven経由でおとします。eclipseを起動してpom.xmlに以下を宣言追加しただけ。(m2eプラグインを先にいれてある状態)

  <dependencies>
    <dependency>
      <groupId>com.rabbitmq</groupId>
      <artifactId>amqp-client</artifactId>
      <version>2.8.7</version>
    </dependency>
  </dependencies>

さっきのgithubのtutorialにjavaもあるので
https://github.com/rabbitmq/rabbitmq-tutorials/blob/master/java/Recv.java
これをこのまま使います。で、実行!
f:id:wkzk:20121003012640p:plain
うけとれました!!

言語またいで送受信できて新鮮!結構、思ったより動いたので調子にのってつんであった本みながらもうちょっとちゃんと動作させてみようかなぁ。

RabbitMQ in Action: Distributed Messaging for Everyone

RabbitMQ in Action: Distributed Messaging for Everyone

  • 作者: Alvaro Videla,Jason J. W. Williams
  • 出版社/メーカー: Manning Pubns Co
  • 発売日: 2012/04/28
  • メディア: ペーパーバック
  • クリック: 7回
  • この商品を含むブログを見る


以上、チュートリアルのコード動作検証より、はてなブログを書く方に時間かかったので涙目、の巻でした(え