SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

システム環境の明後日を支える新技術

IoT時代を支えるプロトコル「MQTT」(中編)

システム環境の明後日を支える新技術(5)

MQTTを用いたPub/Subシステムを理解する

 先ほどのMQTT Pythonライブラリを使ったClient/Publisher接続のプログラム例と同じく、MQTT Pythonライブラリを使ったClient/Subscriber接続のプログラム例を見ていきましょう。このプログラムでは、Brokerに対してトピックを"test"として、Publisherから集まってくるメッセージの購読を行います(図9)。

図9.MQTT Pythonライブラリを使ったClient/Subscriber接続のプログラム例
C:\test> notepad sub-mqtt.py    ※Windowsのメモ帳を使ってプログラム作成
# coding=utf8
import paho.mqtt.client as mqtt

def on_connect(client, userdata, flags, rc):
    print("Connected with result code "+str(rc))
    client.subscribe("test")

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)
client.loop_forever()

 準備が整ったら。すぐにPublisherおよびSubscriber両方を順番に起動し接続してみましょう(図10)。

図10. MQTT Pythonライブラリを使ったPublisher/Subscriber接続実行例
C:\test> py pub-mqtt.py
Connected with result code 0
message published
:
C:\test> py sub-mqtt.py
Connected with result code 0
test b'test message from Publisher Thu Aug 14 15:28:09 2014'
: 

 正常に起動していれば、Subscriber側の画面にPublisherから発行されたメッセージが表示されます。今回利用しているオープンなMQTT実験環境である test.mosquitto.orgは、世界中のシステムエンジニアによって利用されています。今回サンプルプログラムとしてトピックを"test"としていますが、読者の皆様ごとに独自のトピックを立てて、トピックの衝突が起こらないように実験してみてください。

 せっかくなので、Subscriber側のMQTT Subscribe Requestのパケットトレースも見てみましょう(図11)。

図11. MQTT Subscribe Requestのパケットトレース
図11. MQTT Subscribe Requestのパケットトレース

 このパケットトレースからトピック"test"に対するメッセージ購読をSubsciber側がMQTT Subscribe Requestとして発行していることが確認できます。

 この手順を踏まえて、Publisher側から発行されたメッセージがBrokerを経由してSubscriber側へ伝搬します。図12は、Broker側からSubscriber側へ伝搬したMQTT Publish Messageです。

図12. MQTT Publish Messageのパケットトレース
図12. MQTT Publish Messageのパケットトレース

 Publisher側がBrokerへ送信したMQTT Publish Messageとまったく同じ内容が、Subscriber側のMQTT Publish Messageでも確認できます。

 それでは最後にPublisher, Broker, SubscriberにおけるMQTTのやり取りについてまとめて見ていきましょう。図13は、Publisher, Broker, SubscriberにおけるMQTTコマンドの動作を図示したものです。

図13. Publisher, Broker, SubscriberにおけるMQTTコマンドの動作
図13. Publisher, Broker, SubscriberにおけるMQTTコマンドの動作

 初めに、PublisherおよびSubscriberはMQTT Connect commandでBrokerへの接続を試みます。成功すれば、MQTT Connect ACKで受理されます。そのあとPublisherはMQTT Publish Messageによってトピックごとのメッセージ発行をBrokerに対して行います。Subscriberは、メッセージ購読したいトピックに対してMQTT Subscribe Requestを発行します。成功すれば、MQTT Subscribe ACKで受理されます。以後はBrokerを経由してMQTT Publish MessageがPublisherからSubscriberへ伝搬していきます。

 MQTTの基礎的なシステム設計なので非常にシンプルな仕組みですが、アイデアとシステム設計次第では限りない可能性を秘めたメッセージングシステムになっていくことでしょう。

 IoT(Internet of Things)やMQTTなど要素技術の普及や展開は、正直まだまだ始まったばかりという段階です(図14)。筆者もIoT関連デバイスや開発環境などを定期的にリサーチし、技術普及か市場の受け入れ方を確認していますが、少しずつ少しずつ進化していっていることを感じています。

図14. IoTにおける成長分野と参入障壁を考慮した市場性メモ(再掲載)
図14. IoTにおける成長分野と参入障壁を考慮した市場性メモ(再掲載)

次回予告

 さて次回は、暗号化通信によるMQTTの取り組みやネットワーク性能など、より実践的なMQTTのPub/Subシステムの使い方について見ていきます。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
システム環境の明後日を支える新技術連載記事一覧

もっと読む

この記事の著者

松本 直人(マツモト ナオト)

1996年より特別第二種通信事業者のエンジニアとしてインターネット網整備に従事。その後システム・コンサルタント,ビジネス・コンサルタントを経て2010年より,さくらインターネット株式会社 / さくらインターネット 研究所 上級研究員。(2016年より一時退任)研究テーマはネットワーク仮想化など。3~5年先に必要とされる技術研究に取り組み、世の中に情報共有することを活動基本としている。著書: 『モノのインターネットのコトハジメ』,『角川インターネット講座 ~ビッグデータを開拓せよ~』など多数。情報処理学会 インターネットと運用技術研究会 幹事

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/8019 2014/09/23 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー