MQTTにおけるシステム設計
前回は簡単な動作検証を行うため、MQTTを取り巻くシステムの仕組みについて解説をしていませんでしたので、今回は「MQTTにおけるシステム設計」の基礎から見ていきましょう。MQTTはPub/Sub(Publish/Subscribe)モデルのシステムで、メッセージ発行元とメッセージ購読者をブローカがトピックごとにつなぎます(図1)。
PublisherおよびSubscriberは異なるトピックであってもBrokerを共有することができるため、用途に応じてMQTTの仕組みを共有することができます。
つづいて、Publisher, Broker, Subscriberの基本動作について確認していきましょう。
MQTT経由でのPublisherおよびSubscriberのやり取りはBrokerへの登録作業から始まります。いずれも共有するトピックにおいてメッセージ発行とメッセージ購読の登録が開始されます。その上でトピックごとのメッセージがメッセージ発行元であるPublisherからメッセージ購読者であるSubscriberへと伝搬するのです(図2)。
前回はSubscriberの動作をみてきましたので、今回はPublisherの動作について見ていきましょう。図3は、MQTT Pythonライブラリを使ったClient/Publisher接続のプログラム例です。
今回もインターネット上で公開されているオープンなMQTTテスト環境であるtest.mosquitto.orgを利用します。このプログラムでは、Brokerに対してトピックを"test"として、一定間隔で時刻情報をPublisher側からメッセージ発行します。実際のIoT(Internet of Things)ではメッセージ発行の内容に、温度や加速度などさまざまなセンサーからの入力情報が入ることになるでしょう。
C:\test> notepad pub-mqtt.py ※Windowsのメモ帳を使ってプログラム作成 # coding=utf8 import paho.mqtt.client as mqtt import time def on_connect(client, userdata, flags, rc): print("Connected with result code "+str(rc)) def on_message(client, userdata, msg): print(msg.topic+" "+str(msg.payload)) client = mqtt.Client() client.on_connect = on_connect client.on_message = on_message client.connect("test.mosquitto.org", 1883) while client.loop() == 0: msg = "test message from Publisher "+time.ctime() client.publish("test", msg, 0, True) print("message published") time.sleep(1.5) pass
それでは準備が整ったら。すぐに接続してみましょう(図4)。
C:\test> py pub-mqtt.py Connected with result code 0 message published message published message published message published message published
これでメッセージ発行完了です。ですが、これでは皆様も釈然としないかと思いますので、こちらも前回同様にプロトコル詳解をネットワークアナライザであるWiresharkを使って見ていきましょう。