この項目は、書きかけの項目です。この項目を加筆・訂正などしてくださる協力者を求めています。
MQTT
MQ Telemetry Transport(MQTT)はブローカーベースの軽量なパブリッシュ / サブスクライブ・メッセージング・プロトコルであり、オープンでシンプル、軽量で、実装が簡単。これらの特性により、ネットワークが高価である、帯域幅が狭い、または信頼性が低い、プロセッサまたはメモリリソースが限られている組み込みデバイスで実行する、といったような制約のある環境での使用に最適(であるが、それだけに限定はされない)
現在の最新バージョンは5.0
っぽい。3.1.1
からの変更は以下に。
MQTT Version 5.0 でできること。
特徴
- 1対多のメッセージ配信とアプリケーションからの分離を提供する、Pub / Sub メッセージパターン
- ペイロードの内容(Plaintext, JSON, XML, etc)に依存しないメッセージ転送方式
- TCP/IPによる基本的なネットワーク接続を提供
- メッセージ配信の3つのサービスレベル:
レベル | 内容 |
---|---|
At most once (最大1回) |
メッセージは下層となるTCP/IPネットワークに基づきベストエフォートで配信。メッセージの損失または重複が発生する可能性がある。このレベルは、たとえば、次のデータがすぐに送信されるため、個々の測定値が失われても問題にならない(温度測定などの)環境センサーデータで使用される |
At least once (少なくとも1回) |
メッセージは確実に到着するが、重複が発生する可能性がある |
Exactly once (正確に1回) |
メッセージが1回だけ到着することが保証される。メッセージが重複したり失われたりすると誤った料金が適用される可能性がある、課金システムなどで使用でされる |
- 小さな転送オーバーヘッド(固定長ヘッダーはわずか2バイト)およびネットワークトラフィックを削減するためプロトコル交換を最小化
- LWT(Last Will and Testament)機能を使用してクライアントの異常な切断をクライアントに通知するメカニズム
- ペイロードの最大は 256M byte1 (プロトコル仕様上の話で個々の実装は知らない)
- 名前にMQとあるが、いわゆるMessage Queueの機能はない(メッセージの順序保証などはされない)
標準化
さくっとわかりたい
アプリケーション
センサデータ収集系かチャットアプリ系で使用されることが多いようだ
実装
実装 | 言語 | URL | 内容 | 備考 |
---|---|---|---|---|
Mosquitto™ | C | URL | ブローカー クライアント |
おそらく一番有名で、リファレンス実装的な感じ。GitHub★3.5K。ちょっと触ってみた |
ruby-mqtt | ruby | URL | クライアント | 個人的に興味あり |
MQTT.js | JS | URL | クライアント | PahoのJSよりAPIがモダンだと言われている。GitHub★5.3K |
Paho | 多い | URL | クライアント | サポートしている言語が多い。Python は GitHub★1.1K |
HiveMQ | Java | URL | ? | 名前からしてJavaな商用版っぽいが、GitHub にコミュニティー版がある |
Aedes | JS | URL | ブローカー | Mosca から Aedes になったみたい |
- AWS, GCP, Azureなどクラウド事業者が提供するIoTプラットフォームとしての実装もある
- 今後も見つけ次第リストに追加していきたい
もう少し深く知りたい
- MQTT Essentials:英語だがMQTTの仕様とベストプラクティスがうまくまとまっている。オススメ
- MQTT とはなんだったのか:2017年の時点の情報。実際の実装経験から、MQTTの勘違いしやすいポイントがまとまっている。すばらしい。
- MQTTのパケットを覗いてみた(1)
- Understanding the MQTT Protocol Packet Structure:パケットやプロトコルの図解がよい
- MQTTバージョン5の概要 2018年版:パケットやプロトコルの図解がよい。パケットフォーマットはMQTT3と5の比較で解説してありわかりやすい
- MQTT Version 3.1.1 をふりかえる
- MQTTバージョン5の概要 第5回 考察 MQTTはIoTにおいてHTTP/RESTを完全に駆逐する:MQTT5.0がMQTT3の短所をどう解決したか、またHTTPと比べてどうかの考察が良い
サービス
- CloudMQTT:フリー版が SOLD OUT とかになってておしい...
- ユーザー登録不要、無料ですぐに使えるMQTTブローカを提供しています
- 以前に時雨堂さんが Sango というサービスを作っていたようだ。今はない
- shiftr.io:これ、メッセージを可視化してくれるようなサービスか?あとで触ってみよう。
- Adafruit IO
アプリ作っている人たち
シリーズ
- DockerとMosquitto™でMQTTに触れる
- MQTTを調べている
- MQTTの通信を可視化する - shiftr.io
- Azure IoT Hub に Mosquitto™ から MQTT なげてみる
- MQTT.js でブラウザから MQTTブローカ に Pub/Sub する
-
256MBは結構でかいな ↩