mqttcliとsangoでMicroServiceっぽいことをやってみます。
- mqttcli: https://github.com/shirou/mqttcli
- sango: https://sango.shiguredo.jp/ (ここではライトプランを利用します)
参考: 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
- 事前作業
===========
接続テスト
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で接続を切断します。
- sangoでトピックの作成、購読、更新
====================================
ターミナルを3つ開いて、それぞれトピックの作成、トピックの購読、トピックの更新を行なってみます。
2.1. トピックの作成 (ターミナル1)
空のファイルを作成し、そのファイルが更新されたらsangoのトピックに投稿を行うプロセスを起動します。
CMD_MQTT="${HOME}/bin/mqttcli"
MQTT_TOPIC_ROOT=`cat ~/.mqttcli.cfg | jq -r '.username'`
FILE_INPUT="${HOME}/input.log"
touch ${FILE_INPUT}
tail -f ${FILE_INPUT} | ${CMD_MQTT} pub -t "${MQTT_TOPIC_ROOT}/log" -s
2.2. トピックの購読 (ターミナル2)
トピックの購読をします。
CMD_MQTT="${HOME}/bin/mqttcli"
MQTT_TOPIC_ROOT=`cat ~/.mqttcli.cfg | jq -r '.username'`
${CMD_MQTT} sub -t "${MQTT_TOPIC_ROOT}/log" |\
grep "status:500" --line-buffered
- トピックの更新
=================
3.1. トピック更新
トピックを更新します。
FILE_INPUT="${HOME}/input.log"
echo 'status:500 hoge' >> ${FILE_INPUT}
echo 'status:500 hige' >> ${FILE_INPUT}
3.2. トピックの確認
購読側にトピックに内容が流れてくることを確認しましょう。
status:500 hoge
status:500 hige
3.3. トピック購読の停止
ターミナル2でCtrl+Cを行い、接続を切断します。
- MicroServiceっぽいことをやってみる
=====================================
statusが500のリクエストだけを"/log/500"に送るMicroServiceを作成してみます。
${CMD_MQTT} sub -t "${MQTT_TOPIC_ROOT}/log" |\
grep "status:500" --line-buffered |\
${CMD_MQTT} pub -t "${MQTT_TOPIC_ROOT}/log/500" -s
ターミナルを起動し、MicroServiceを利用するクライアントとして接続します。
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}
ターミナルを起動し、クライアントが受信したトピックを表示します。
FILE_OUTPUT="${HOME}/sample-error.log"
tail -f ${FILE_OUTPUT}
ログを追記してみます。
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}
クライアントのトピックに以下が表示されることを確認します。
status:500 Server Error
完了
ターミナル1、ターミナル2、ターミナル4、ターミナル5でCtrl+Cを行い、接続を切断します。