LoginSignup
1
1

More than 5 years have passed since last update.

[MQTT] mqttcliとsangoでMicroServiceっぽいことをやってみる

Last updated at Posted at 2015-04-03

mqttcliとsangoでMicroServiceっぽいことをやってみます。

参考: http://tdoc.info/blog/2014/09/10/micorservice.html

前提条件

sango

sangoのアカウントを持っていて、トピックを利用できること。

mqttcli

~/bin/にインストールされている。

コマンド
CMD_MQTT="${HOME}/bin/mqttcli"

以下のバージョンで動作確認済

  • mqttcli 0.0.1
コマンド
${CMD_MQTT} -v
結果(例)
mqttcli version 0.0.1

[MQTT] mqttcliをインストールしてsangoにつないでみる: http://qiita.com/tcsh/items/0113f0517f7997b6d71c

1. 事前作業

接続テスト

コマンド
CMD_MQTT="${HOME}/bin/mqttcli"
MQTT_TOPIC_ROOT=`cat ~/.mqttcli.cfg | jq -r '.username'` \
  && echo ${MQTT_TOPIC_ROOT}
${CMD_MQTT} sub -t "${MQTT_TOPIC_ROOT}/#" -d
結果(例)
INFO[0000] Broker URI: tcp://lite.mqtt.shiguredo.jp:1883
INFO[0000] Topic: example@github/#
INFO[0000] connecting...
INFO[0000] client connected

上記が確認できたら、Ctrl+Cで接続を切断します。

2. sangoでトピックの作成、購読、更新

ターミナルを3つ開いて、それぞれトピックの作成、トピックの購読、トピックの更新を行なってみます。

2.1. トピックの作成 (ターミナル1)

空のファイルを作成し、そのファイルが更新されたらsangoのトピックに投稿を行うプロセスを起動します。

コマンド(ターミナル1)
CMD_MQTT="${HOME}/bin/mqttcli"
MQTT_TOPIC_ROOT=`cat ~/.mqttcli.cfg | jq -r '.username'`
コマンド(ターミナル1)
FILE_INPUT="${HOME}/input.log"
touch ${FILE_INPUT}
tail -f ${FILE_INPUT} | ${CMD_MQTT} pub -t "${MQTT_TOPIC_ROOT}/log" -s

2.2. トピックの購読 (ターミナル2)

トピックの購読をします。

コマンド(ターミナル2)
CMD_MQTT="${HOME}/bin/mqttcli"
MQTT_TOPIC_ROOT=`cat ~/.mqttcli.cfg | jq -r '.username'`
コマンド(ターミナル2)
${CMD_MQTT} sub -t "${MQTT_TOPIC_ROOT}/log" |\
  grep "status:500" --line-buffered

3. トピックの更新

3.1. トピック更新

トピックを更新します。

コマンド(ターミナル3)
FILE_INPUT="${HOME}/input.log"

echo 'status:500 hoge' >> ${FILE_INPUT}
echo 'status:500 hige' >> ${FILE_INPUT}

3.2. トピックの確認

購読側にトピックに内容が流れてくることを確認しましょう。

結果(ターミナル2)
status:500 hoge
status:500 hige

3.3. トピック購読の停止

ターミナル2でCtrl+Cを行い、接続を切断します。

4. MicroServiceっぽいことをやってみる

statusが500のリクエストだけを"/log/500"に送るMicroServiceを作成してみます。

コマンド(ターミナル2)
${CMD_MQTT} sub -t "${MQTT_TOPIC_ROOT}/log" |\
  grep "status:500" --line-buffered |\
  ${CMD_MQTT} pub -t "${MQTT_TOPIC_ROOT}/log/500" -s

ターミナルを起動し、MicroServiceを利用するクライアントとして接続します。

コマンド(ターミナル4)
CMD_MQTT="${HOME}/bin/mqttcli"
MQTT_TOPIC_ROOT=`cat ~/.mqttcli.cfg | jq -r '.username'`
FILE_OUTPUT="${HOME}/sample-error.log"
${CMD_MQTT} sub -t "${MQTT_TOPIC_ROOT}/log/500" > ${FILE_OUTPUT}

ターミナルを起動し、クライアントが受信したトピックを表示します。

コマンド(ターミナル5)
FILE_OUTPUT="${HOME}/sample-error.log"
tail -f ${FILE_OUTPUT}

ログを追記してみます。

コマンド(ターミナル3)
echo 'status:200 Success' >> ${FILE_INPUT}
echo 'status:300 Redirection' >> ${FILE_INPUT}
echo 'status:400 Client Error' >> ${FILE_INPUT}
echo 'status:500 Server Error' >> ${FILE_INPUT}

クライアントのトピックに以下が表示されることを確認します。

結果(ターミナル5)
status:500 Server Error

完了

ターミナル1、ターミナル2、ターミナル4、ターミナル5でCtrl+Cを行い、接続を切断します。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1