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 |
TCP/IP群 |
---|
アプリケーション層 |
カテゴリ |
トランスポート層 |
カテゴリ |
インターネット層 |
カテゴリ |
リンク層 |
カテゴリ |
|
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とTLSとWebSocketが仕様で言及されている。[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]
クライアントがトピックの購読を行った際に保存されたメッセージがある場合はサーバにより購読したクライアントに配布される。
これによりクライアントはトピック購読前の最後のメッセージを受け取ることができる。
パケットタイプ
![](http://upload.wikimedia.org/wikipedia/commons/thumb/8/82/MQTT_protocol_example_without_QoS.svg/300px-MQTT_protocol_example_without_QoS.svg.png)
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
- Mosquitto
- RabbitMQ(Pluginが必要)
- Apache_ActiveMQ
- MQTTnet - .NETによる実装。ライブラリであるが、短いコードで拡張可能な独自のブローカーを実装できる。
商用
使用しているプロジェクト
Facebook Messenger
FacebookのメッセンジャーにMQTTを使用している。
IECC Scalable
IECCシグナリング制御システムのDeltaRailの最新バージョンでは、システムとシグナリングシステムの他の構成要素のさまざまな部分内の通信のためのMQTTを使用している。
脚注
出典
- ^ a b c MQTT Version 5.0
- ^ “OASIS Message Queuing Telemetry Transport (MQTT) Technical Committee Charter”. OASIS. 2020年12月15日閲覧。
- ^ “MQTT SN Subcommittee”. OASIS. 2020年12月15日閲覧。
- ^ [1]MQTT Specifications
- ^ 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日閲覧。
- ^ MQ Integrator Pervasive Device Protocol Protocol Version 2
- ^ MQTT Version 3.1.1
- ^ “Foundational IoT Messaging Protocol, MQTT, Becomes International OASIS Standard”. OASIS (2014年11月13日). 2024年8月3日閲覧。
- ^ ISO/IEC 20922:2016
- ^ “OASIS MQTT Internet of Things Standard Now Approved by ISO/IEC JTC1”. OASIS (2016年7月19日). 2024年8月3日閲覧。
- ^ “#MQTT V5.0 Committee Specification 02 approved & published”. OASIS (2019年3月19日). 2024年8月3日閲覧。
- ^ a b MQTT Version 3.1
- ^ a b MQTT Version 5.0, 4.2
- ^ MQTT Version 5.0, 4.7
- ^ a b c d MQTT Version 5.0, 4.3
- ^ MQTT Version 5.0, 4.3.1
- ^ MQTT Version 5.0, 4.3.2
- ^ MQTT Version 5.0, 4.3.3
- ^ a b MQTT Version 5.0, 4.4
- ^ MQTT Version 5.0, 1.2
- ^ a b MQTT Version 5.0, 3.1.2.5
- ^ MQTTのLWTを利用してリアルタイムにAWS IoTに接続するデバイスの切断を検出する Amazon Web Services ブログ 2022年8月18日 2024年7月21日閲覧
- ^ MQTT Version 5.0, 3.3.1.3
- ^ a b MQTT Version 5.0, Appendix C
- ^ MQTT Version 5.0, 3.8
- ^ MQTT Version 5.0, 3.3
- ^ MQTT Broker Feature Comparison Feature comparison of the most popular MQTT brokers.
- ^ “Cross-Platform MQTT Client”. ioctrl.com. 2021年9月4日時点のオリジナルよりアーカイブ。2021年9月4日閲覧。
参考文献
- OASIS (2019年3月7日). “MQTT Version 5.0” (英語). OASIS. 2024年7月27日閲覧。
- OASIS (2014年10月29日). “MQTT Version 3.1.1” (英語). OASIS. 2024年8月3日閲覧。
- “ISO/IEC 20922:2016”. ISO (2016年6月). 2024年8月3日閲覧。
- IBM, Eurotech (2010年). “MQTT V3.1 Protocol Specification” (英語). 2024年7月27日閲覧。
- IBM, Arcom Control Systems (2000年). “MQTT V3 Protocol Specification” (英語). 2024年8月3日閲覧。
- Andy Stanford-Clark, Arlen Nipper (1999年10月22日). “"MQ Integrator Pervasive Device Protocol" Specification "MQ/SCADA Protocol" Protocol Version Number: 2” (英語). 2024年8月3日閲覧。
外部リンク
- Official site
- Official website of Technical Committee
![]() | この項目は、ソフトウェアに関連した書きかけの項目です。この項目を加筆・訂正などしてくださる協力者を求めています(PJ:コンピュータ/P:コンピュータ)。 |
- 表示
- 編集