MQTT

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

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

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

Pub/Sub型メッセージング·パターンには、メッセージブローカーが必要である。

ブローカーは、メッセージのTopicに基づいて、それを必要としているクライアントにメッセージを配信する。

とシーラスリンクソリューションのアーレンニッパーは1999年に、プロトコルの最初のバージョンを執筆している。

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

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

軽量なプロトコル 
プロトコル電文仕様は、軽量でシンプルになっている。
 ヘッダーサイズが最小で 2 byte
 シンプルなプロトコルシーケンス

柔軟性の高いメッセージ配布(Sub：購読) 
配布先条件が/区切りの階層構造になっており、さらにワイルドカードによる指定ができる。配布先はそのパターンにマッチした宛先になる。
 TopicベースでのPub/Sub
 1対1、1対N、N対Nのメッセージ配布

メッセージ配布の品質 
アプリケーションの特性に合わせて三種類の QoS (Quality of Service) レベルの指定ができる。
 QoS0
 最高１回
 メッセージが確実に届く保証はない。
 メッセージ配布に失敗しても再送をしない。
 QoS1
 最低１回
 必ずメッセージ配布するが、重複する可能性がある。
 QoS2
 正確に１回
 必ずメッセージを配布して、重複も発生しない。

メッセージ再配布機能 
メッセージ再配布機能 (Durable subscribe) は、次のフローで処理される。
 意図せずにSubscriber（メッセージ配布者）通信が切断
 その後、当該のSubscriberが再接続
 切断から再接続までに発生したメッセージを再送処理
 QoS1,QoS2のメッセージを再配布

Last Will and Testament

Retain 
 ブローカーが最後に配布したメッセージは必ず保存する。

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

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

OSS 
 Mosquitto
 RabbitMQ（Pluginが必要）
 Apache_ActiveMQ
 MQTTnet - .NETによる実装。ライブラリであるが、短いコードで拡張可能な独自のブローカーを実装できる。

商用 

IBM MessageSight（ハードウェア）
 IBM WebSphere MQ Telemetry
 時雨堂 Akane
 MqttDesk MQTT Client -

メッセージタイプ

Connect 

サーバーとの接続が確立されるのを待機し、ノード間でリンクを作る。

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

Publish 
リクエストをMQTTクライアントに渡した後、アプリケーションスレッドに即座に戻る。

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

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

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

外部リンク 

通信プロトコル
アプリケーション層プロトコル