Archive for 3月, 2014

MQTT / RabbitMQ

日曜日, 3月 9th, 2014

前回のRabbitMQでMQTT(MQ Telemetry Transport)の動作確認もしてみたので、そのメモをしておきたいと思います。
MQTTについては以下参照。

HTTPからMQTTへ – IBMが提唱するモノとモノがつながる時代に最適化したプロトコル&アプライアンス
http://it.impressbm.co.jp/special/2013/12/09/5313

AMQP(Advanced Message Queuing Protocol)と何が違うのか、どのように使い分けるのか、ということですが、MQTTは組み込み機器等で軽量M2M(Machine-to-Machine)の通信で使われるもの、と認識しています。

インストールは、前回の手順の続きで、プラグインを追加し、サーバを再起動します。
環境 : MacOSX 10.9
参考 : https://gist.github.com/voluntas/8238751

./sbin/rabbitmq-plugins enable rabbitmq_mqtt
./sbin/rabbitmq-server

次に、PublisherとSubcriberのプログラムをPythonで用意します。
(これは参考サイトのものをそのIPアドレスを変えて使いました。pub.py,sub.py)
以下モジュールをインストールします。
環境 : Windows7

pip install paho-mqtt

通信内容をキャプチャして内容を見てみたかったので、別のマシンからアクセスすることにしました。
コマンドプロンプトをPub/Subと別々にひらき、それぞれを実行します。(subから実行。複数可)
pubを実行すると、

my/topic/string 0 hello world

と表示されます。

「軽量」ということなので、どんなパケットだろうということでパケットキャプチャしてみました。
mqtt_sub
上はsub側のバケット部分を選択しています。下はpub側。
mqtt_pub

確かに少ないですね。

RabbitMQ / Mac

木曜日, 3月 6th, 2014

Erlangつながりで、MacでRabbitMQをうごかしてみたので、メモしておきたいと思います。

RabbitMQ(ラビットエムキュー)は、Advanced Message Queuing Protocol(AMQP)を使用した、オープンソースのメッセージ指向ミドルウェア。RabbitMQ Serverは、Erlang言語で記述されており、クラスタリングとフェイルオーバーのためにOpen Telecom Platformフレームワークで構築。
(by Wikipedia)

まずMac用Erlangを以下からダウンロードしてインストール
http://code.google.com/p/rudix/downloads/detail?name=erlang-R15B02-0.pkg
/usr/local/binにerlなどがイントールされます。

RabbitMQサーバは以下サイトから rabbitmq-server-mac-standalone-3.2.4.tar.gz をダウンロード
http://www.rabbitmq.com/install-standalone-mac.html
rabbitmq_server-3.2.4/sbinのファイルを実行します。

以下チュートリアルを使用
https://github.com/rabbitmq/rabbitmq-tutorials/tree/master/erlang

チュートリアルの中に以下を展開します。

git clone https://github.com/rabbitmq/rabbitmq-tutorials
cd rabbitmq-tutorials/erlang
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

rabbitmq_server
プラグインを有効にします。

./rabbitmq-plugins enable rabbitmq_management
The following plugins have been enabled:
mochiweb
webmachine
rabbitmq_web_dispatch
amqp_client
rabbitmq_management_agent
rabbitmq_management
Plugin configuration has changed. Restart RabbitMQ for changes to take effect.

これで、ブラウザで管理画面が表示できます。(サーバ起動後 guest/guestでログイン)

RabbitMQ.

サーバを起動します。

./rabbitmq-server

RabbitMQ 3.2.4. Copyright (C) 2007-2013 GoPivotal, Inc.
## ## Licensed under the MPL. See http://www.rabbitmq.com/
## ##
########## Logs: ./../var/log/rabbitmq/rabbit@N-no-MacBook-Pro.log
###### ## ./../var/log/rabbitmq/rabbit@N-no-MacBook-Pro-sasl.log
##########
Starting broker… completed with 6 plugins.

rabbitmq-tutorials/erlang

ls
README.md emit_log_topic.erl receive_logs.erl
amqp_client new_task.erl receive_logs_direct.erl
amqp_client-2.7.0 rabbit_common receive_logs_topic.erl
emit_log.erl rabbit_common-2.7.0 send.erl
emit_log_direct.erl receive.erl worker.erl

tutorial実行

./send.erl
[x] Sent ‘Hello World!’
./receive.erl
[*] Waiting for messages. To exit press CTRL+C
[x] Received <<"Hello World!">>

参考サイト
http://d.hatena.ne.jp/iwasakims/20130512/1368378919
http://opentechnica.blogspot.jp/2012/02/macrabbiqmq.html