MQTT

MQTT
MQTTのロゴ
ステータス 公開済み
開始年 1999
最新版 5.0[1]
2019年3月7日
組織 OASIS
委員会 OASIS Message Queuing Telemetry Transport Technical Committee[2]
編集者 Andrew Banks(IBM)、Ed Briggs(Microsoft)、Ken Borgendale(IBM)、Rahul Gupta(IBM)[1]
関連する標準 MQTT-SN[3]
ウェブサイト mqtt.org

MQTT(旧称:MQ Telemetry Transport、Message Queuing Telemetry Transport)は、メッセージ指向ミドルウェアアプリケーション層で使用される、TCP/IPによるPub/Sub型データ配信モデルの軽量なデータ配信プロトコルである。

MQTTのMQは、歴史的にはMQSeriesから来ているが、メッセージキューの機能は持たない。

非力なデバイスネットワークが不安定な場所でも動作しやすいように、メッセージ通信電文が軽量に設計されていることが特徴である。

Pub/Sub型メッセージング·パターンには、サーバとしてメッセージブローカー英語版が必要である。

サーバは、メッセージのトピックに基づいて、それを必要としているクライアントにメッセージを配布する。

仕様はロイヤリティフリーで公開されていて、現在の仕様は5となっている。[4]

歴史

[編集]

1999年にIBMアンディー・スタンフォード・クラーク英語版とArcom Control Systemsのアーレンニッパーによりプロトコルの最初のバージョンが執筆された。[5]

その年の内にVersion 2を定義し、1999年10月22日にアップデートしたVersion 2.3でVersion3.1.1相当のパケットを備えるものとなった。[5][6]

2000年にはVersion 3.0がリリースされた。[5]

2007年にEurotech英語版に買収されたArcom Control Systemsは社名もEurotechに変更したため、MQTTの仕様はIBMとEurotechが管理するものになった。

2010年にVersion 3.1がリリースされた。[5]

2014年10月29日にVersion 3.1.1がリリースされ11月13日に発表された。[7][8] このバージョンからOASISが仕様を管理している。 また、2016年6月にISO/IEC標準のISO/IEC 20922:2016として採用された。[9] [10]

2019年3月7日にVersion 5.0がリリースされ2019年3月19日に発表された。[1][11]

特徴

[編集]

MQTTには次のような特徴がある。

軽量なプロトコル

[編集]

プロトコル電文仕様は軽量でシンプルになっていてヘッダーサイズは最小で2バイトである。[12]

MQTTはロスレスで順序保証がされた双方向通信のプロトコル上で動作することが前提となっていて、TCP/IPとTLSWebSocketが仕様で言及されている。[13]ただし、これらのプロトコルを使用することに限定はしていない。

TLSを使う場合は8883、TLSを使わない場合は1883のTCPポートIANAに登録されている。[13]

柔軟性の高いメッセージ配布(Sub:購読)

[編集]

配布先条件が/区切りの階層構造になっており、さらにワイルドカードによる指定ができる。[14] 配布先はそのパターンにマッチした宛先になる。

  • トピックベースでのPub/Sub
  • 1対1、1対N、N対Nのメッセージ配布

メッセージ配布の品質

[編集]

三種類の QoS (Quality of Service) レベルの指定ができる。[15]

QoSレベルは単一の送信者と単一の受信者の間で適用される。[15]

つまりサーバが同一のメッセージを複数のクライアントに配布を行う場合はそれぞれのクライアントで異なるQoSレベルが使用される場合がある。[15]

またメッセージを配布するクライアントとサーバ間、トピックに応じて配布するサーバとクライアント間でも同じことが言えるためアプリケーションメッセージの品質を定義するものではない。

QoS 0: At most once delivery

[編集]

最高1回の送信を行う。[16] 使用しているトランスポート層の性能に応じたメッセージ配布を行う。[15] メッセージが確実に届く保証はない。 メッセージ配布に失敗しても再送をしない。

QoS 1: At least once delivery

[編集]

最低1回の送信を行う。[17] 必ずメッセージを配布するが、重複する可能性がある。

QoS 2: Exactly once delivery

[編集]

正確に1回の送信を行う。[18] 必ずメッセージを配布して、重複も発生しない。

メッセージ再配布機能

[編集]

クライアントが再接続をしたときにセッションが残っている場合はクライアントとサーバの両方が確認応答がないPUBLISHパケットとPUBRELパケットを再送信する。[19]

これはメッセージが再配布される唯一の機会である。[19]

QoS 0のPUBLISHパケットの再送信は行われない。

Willメッセージ

[編集]

クライアントとの接続が正常にクローズされなかったときにサーバによって配布されるメッセージのこと。 [20]

クライアントがサーバに接続する際にCONNECTパケットにWillフラグとWillメッセージを含める。サーバはCONNECTパケットを受け入れた場合はWillメッセージをセッションに関連付けて保存する。[21]

サーバはクライアントとのネットワーク接続が正常ではない方法でクローズされたとき保存しているWillメッセージを購読している別のクライアントに配布する。[21]

MQTT Version 3.1までの仕様にはLast Will and Testamentと書かれていた。[12] そのためLWTと言う略称で説明される場合がある。[22]

Retain

[編集]

クライアントがRetainフラグを有効にして配布したメッセージはサーバでトピックごとに上書き保存される。[23]

クライアントがトピックの購読を行った際に保存されたメッセージがある場合はサーバにより購読したクライアントに配布される。

これによりクライアントはトピック購読前の最後のメッセージを受け取ることができる。

パケットタイプ

[編集]
MQTT connection(QoS 0)の例。connect、publish/subscribe、disconnetを行っている。Client Bの最初のメッセージは、retainフラグが付いているため保存されている。

CONNECT/CONNACK

[編集]

クライアントがサーバーとの接続が確立されるのを待機し、ノード間でセッションを作成する。

MQTT Version 5.0でサーバのオプション機能をクライアントに通知するために多くのパラメータが追加された。[24]

SUBSCRIBE

[編集]

クライアントがサーバにトピックを登録する。[25]

PUBLISH

[編集]

アプリケーションメッセージを配布するためにクライアントからサーバ、またはサーバからクライアントに送信される。[26]

クライアントからPUBLISHパケットを受信したサーバはトピックを購読しているクライアントにPUBLISHパケットでメッセージの転送を行う。

DISCONNECT

[編集]

MQTTクライアントが必要な処理を完了し、TCP/IPセッションが切断されるのを待機する。

MQTT Version 5.0よりサーバからもDISCONNECTパケットを送信する場合がある。[24]

ブローカー

[編集]

MQTTをサポートするブローカー(MQサーバ)は数多くある。それぞれのサーバがサポートする機能には、基本機能の他、サーバ特有の機能がある[27]

主なMQTTブローカーには以下のようなものがある。

OSS

[編集]

商用

[編集]

使用しているプロジェクト

[編集]

Facebook Messenger

[編集]

FacebookのメッセンジャーにMQTTを使用している。

IECC Scalable

[編集]

IECCシグナリング制御システムのDeltaRailの最新バージョンでは、システムとシグナリングシステムの他の構成要素のさまざまな部分内の通信のためのMQTTを使用している。

脚注

[編集]

出典

[編集]
  1. ^ a b c MQTT Version 5.0
  2. ^ OASIS Message Queuing Telemetry Transport (MQTT) Technical Committee Charter”. OASIS. 2020年12月15日閲覧。
  3. ^ MQTT SN Subcommittee”. OASIS. 2020年12月15日閲覧。
  4. ^ [1]MQTT Specifications
  5. ^ a b c d Ian Craggs (2024年6月20日), The Origin of MQTT, HiveMQ, https://www.hivemq.com/blog/the-history-of-mqtt-part-1-the-origin/ 2024年8月3日閲覧。 
  6. ^ MQ Integrator Pervasive Device Protocol Protocol Version 2
  7. ^ MQTT Version 3.1.1
  8. ^ Foundational IoT Messaging Protocol, MQTT, Becomes International OASIS Standard”. OASIS (2014年11月13日). 2024年8月3日閲覧。
  9. ^ ISO/IEC 20922:2016
  10. ^ OASIS MQTT Internet of Things Standard Now Approved by ISO/IEC JTC1”. OASIS (2016年7月19日). 2024年8月3日閲覧。
  11. ^ #MQTT V5.0 Committee Specification 02 approved & published”. OASIS (2019年3月19日). 2024年8月3日閲覧。
  12. ^ a b MQTT Version 3.1
  13. ^ a b MQTT Version 5.0, 4.2
  14. ^ MQTT Version 5.0, 4.7
  15. ^ a b c d MQTT Version 5.0, 4.3
  16. ^ MQTT Version 5.0, 4.3.1
  17. ^ MQTT Version 5.0, 4.3.2
  18. ^ MQTT Version 5.0, 4.3.3
  19. ^ a b MQTT Version 5.0, 4.4
  20. ^ MQTT Version 5.0, 1.2
  21. ^ a b MQTT Version 5.0, 3.1.2.5
  22. ^ MQTTのLWTを利用してリアルタイムにAWS IoTに接続するデバイスの切断を検出する Amazon Web Services ブログ 2022年8月18日 2024年7月21日閲覧
  23. ^ MQTT Version 5.0, 3.3.1.3
  24. ^ a b MQTT Version 5.0, Appendix C
  25. ^ MQTT Version 5.0, 3.8
  26. ^ MQTT Version 5.0, 3.3
  27. ^ MQTT Broker Feature Comparison Feature comparison of the most popular MQTT brokers.
  28. ^ Cross-Platform MQTT Client”. ioctrl.com. 2021年9月4日時点のオリジナルよりアーカイブ。2021年9月4日閲覧。

参考文献

[編集]

外部リンク

[編集]