記事ディレクトリ
MQTTとは何ですか?
MQTT (Message Queuing Telemetry Transport) は、軽量のパブリッシュ/サブスクライブ モデルベースのメッセージ送信プロトコルで、リソースに制約のあるデバイスや、低帯域幅、高遅延、または不安定なネットワーク環境に適しています。これは IoT アプリケーションで一般的であり、センサー、アクチュエーター、その他のデバイス間の効率的な通信を可能にします。
MQTT の仕組み
MQTT の仕組みを理解するには、まず次の概念を習得する必要があります:MQTT クライアント、 MQTT ブローカー、パブリッシュ/サブスクライブ モード、トピック < a i=8>、QoS。
MQTTクライアント
MQTT クライアント ライブラリを実行しているアプリケーションまたはデバイスはすべて MQTT クライアントです。たとえば、MQTT を使用するインスタント メッセージング アプリケーションはクライアントであり、MQTT を使用してデータをレポートするさまざまなセンサーもクライアントであり、さまざまな MQTT テスト ツールもクライアントです。
MQTT ブローカー
MQTT ブローカーは、接続の確立、切断、サブスクライブおよびサブスクライブ解除などの操作を含むクライアント リクエストの処理を担当する主要なコンポーネントであり、メッセージの転送も担当します。効率的で強力な MQTT ブローカーは、大規模な接続と数百万レベルのメッセージ スループットを簡単に処理できるため、IoT サービス プロバイダーはビジネス開発に集中し、信頼性の高い MQTT を迅速に構築できます。アプリケーション。
パブリッシュ/サブスクライブ モデル
パブリッシュ/サブスクライブ モデルとクライアント/サーバー モデルの違いは、メッセージを送信するクライアント (パブリッシャー) とメッセージを受信するクライアント (サブスクライバー) が分離されることです。 デカップリング。パブリッシャーとサブスクライバーの間に直接接続を確立する必要はありませんが、MQTT ブローカーがメッセージのルーティングと配布を担当します。
次の図は、MQTT パブリッシュ/サブスクライブ プロセスを示しています。温度センサーはクライアントとして MQTT ブローカーに接続し、公開操作を通じて温度データを特定のトピック (温度など) に公開します。メッセージを受信した後、MQTT ブローカーは、対応するトピック (温度) にサブスクライブしているサブスクライバー クライアントにメッセージを転送します。
テーマ
MQTT プロトコルは、トピックに基づいてメッセージを転送します。トピックは、URL パスと同様に / で区別されます。次に例を示します。
chat/room/1
sensor/10/temperature
sensor/+/temperature
MQTT トピックは、+ と # の 2 つのワイルドカード文字をサポートします。
- +: 単一レベルのワイルドカードを示します。たとえば、a/+ は a/x または a/y に一致します。
- #: マルチレベルのワイルドカードを示します。たとえば、a/# は a/x、a/b/c/d に一致します。
注: ワイルドカード トピックはサブスクリプションにのみ使用でき、パブリケーションには使用できません。
QoS
MQTT は、さまざまなネットワーク環境でメッセージの信頼性を確保するために 3 つのサービス品質 (QoS) を提供します。
- QoS 0: メッセージは最大 1 回配信されます。現在のクライアントが利用できない場合、このメッセージは失われます。
- QoS 1: メッセージは少なくとも 1 回配信されます。
- QoS 2: メッセージは 1 回だけ配信されます。
MQTT ワークフロー
MQTT の基本コンポーネントを理解した後、その一般的なワークフローを見てみましょう。
- クライアントは、TCP/IP プロトコルを使用してブローカーとの接続を確立します。、オプションで TLS/SSL 暗号化を使用して安全な通信を実現できます。クライアントは認証情報を提供し、セッション タイプ (クリーン セッションまたは永続セッション) を指定します。
- クライアントは、特定のトピックにメッセージを公開することも、トピックをサブスクライブしてメッセージを受信することもできます。クライアントがメッセージをパブリッシュすると、そのメッセージは MQTT ブローカーに送信され、クライアントがメッセージをサブスクライブすると、サブスクライブしたトピックに関連するメッセージを受信します。
- MQTT ブローカーは公開されたメッセージを受信し、これらのメッセージを対応するトピックにサブスクライブしているクライアントに転送します。 QoS レベルに基づいてメッセージの信頼性の高い配信を保証し、セッション タイプに基づいて切断されたクライアントのメッセージを保存します。
MQTT の入門: 簡単なチュートリアル
以下では、いくつかの簡単な例を通して MQTT の使用方法を説明します。開始する前に、MQTT ブローカーと MQTT クライアントを準備する必要があります。
MQTTブローカーの準備
プライベート展開またはフルマネージド クラウド サービスを選択して、独自の MQTT ブローカーを構築できます。または、無料の公的ブローカーを使用することもできます。
- プライベート展開
EMQX は、IoT、産業用 IoT に適した、最もスケーラブルなオープンソース MQTT ブローカーです。車両のインターネットに接続します。次の Docker コマンドを実行して、EMQX をインストールできます。
docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx
- フルマネージド クラウド サービス
フルマネージド クラウド サービスを通じて MQTT サービスを開始するのが最も便利な方法です。下の図に示すように、EMQX Cloud は数分で起動でき、AWS、Google Cloud、Microsoft Azure の 17 リージョンで運用サポートが提供されます。
- 無料のパブリック MQTT ブローカー
この記事では、EMQ が提供する無料のパブリック MQTT ブローカー を使用します。 、フルマネージドMQTT クラウド サービス - EMQX クラウドに基づいて作成されています。サーバー情報は次のとおりです:
Server: broker.emqx.io
TCP Port: 1883
WebSocket Port: 8083
SSL/TLS Port: 8883
Secure WebSocket Port: 8084
MQTTクライアントの準備
この記事では、ブラウザ アクセスをサポートする MQTTX が提供する MQTT クライアント ツールを使用します。アクセス アドレスは http://www.emqx.io/online-mqtt-client です。 MQTTX は、デスクトップ クライアントとコマンド ライン ツールも提供します。
MQTTX は、macOS、Linux、および Windows オペレーティング システム上で実行できるクロスプラットフォームの MQTT 5.0 デスクトップ クライアントです。ユーザーフレンドリーなチャットのようなインターフェイスにより、ユーザーは複数の MQTT/MQTTS 接続を簡単に作成し、MQTT メッセージをサブスクライブおよびパブリッシュできます。
現在、さまざまなプログラミング言語には、成熟したオープンソースの MQTT クライアント ライブラリがあります。一般的な MQTT クライアント ライブラリと SDK で複数のプログラミング言語用の MQTT クライアント ライブラリを厳選し、MQTT クライアントの使用法をすぐに理解できるように詳細なコード例を提供しました。
MQTT接続を作成する
MQTT プロトコルを使用して通信する前に、クライアントはブローカーに接続するための MQTT 接続を作成する必要があります。
ブラウザで http://www.emqx.io/online-mqtt-client を開き、ページの中央にある New Connection
ボタンをクリックすると、次の内容が表示されます。ページ。
[名前] に「Simple Demo」と入力し、右上隅の [接続] ボタンをクリックして MQTT 接続を確立します。下図に示すように、接続が成功しました。
ワイルドカードを使用してトピックを購読する
次に、上で作成した Simple Demo
接続でワイルドカードを使用してトピック sensor/+/temperature
をサブスクライブし、すべてのセンサーから送信された温度データを受信できるようにします。 。
下の図に示すように、New Subscription
ボタンをクリックし、Topic
フィールドにトピックをsensor/+/temperature
入力します。ポップアップ ボックス。QoS はデフォルト値の 0 のままです。
サブスクリプションが成功すると、サブスクリプション リストの中央に新しいレコードが表示されます。
MQTT メッセージをパブリッシュする
次に、左側のメニューの+
ボタンをクリックして、Sensor 1
と Sensor 2
という名前の 2 つの接続を作成します。 2 つの温度センサーをシミュレートするために使用されます。
接続が正常に作成されると、3 つの接続が表示され、各接続の左側にあるオンライン ステータス インジケーターが緑色になります。
接続するために選択Sensor 1
し、ページ下部の公開トピックにsensor/1/temperature
を入力して、メッセージ ボックスに次の JSON 形式のメッセージを入力します。右下の をクリックします。公開ボタンをクリックするとメッセージが送信されます。
{
"msg": "17.2"
}
下図に示すように、メッセージは正常に送信されました。
同じ手順を使用して、 トピックへの Sensor 2
接続で次の JSON メッセージを公開します。 sensor/2/temperature
{
"msg": "18.2"
}
Simple Demo 接続が 2 つの新しいメッセージを受信したことがわかります。
Simple Demo 接続をクリックすると、2 つのセンサーから送信された 2 つのメッセージが表示されます。
MQTT機能のデモ
メッセージを残す
MQTT クライアントがメッセージをサーバーにパブリッシュするときに、メッセージ保持フラグを設定できます。永続メッセージはメッセージ サーバーに保存され、トピックにサブスクライブしている後続のクライアントは引き続きメッセージを受信できます。
下の図に示すように、Sensor 1
接続の Retain
オプションをチェックして、2 つのメッセージを送信します。 retained_message
次に、Simple Demo
接続内の retained_message
トピックをサブスクライブします。サブスクリプションが成功すると、Sensor 1
によって送信された 2 番目の保持メッセージを受信します。これは、サーバーがトピックの最新の保持メッセージのみを保持することを意味します。
クリーンセッション
通常、MQTT クライアントは、オンライン中に他のクライアントによってパブリッシュされたメッセージのみを受信できます。クライアントがオフラインになってからオンラインに戻った場合、オフライン期間のメッセージは受信されません。
ただし、クライアントが Clean Session を false に設定して接続し、同じクライアント ID を使用して再びオンラインになった場合、メッセージ サーバーはクライアント用の一定数のオフライン メッセージをキャッシュし、オンラインに戻ったときにクライアントに送信します。
このデモンストレーションで使用されるパブリック MQTT サーバーは、最大メッセージ数 1000 でオフライン メッセージを 5 分間キャッシュするように設定されており、QoS 0 メッセージは保存されません。
以下では、MQTT 3.1.1 接続を作成し、QoS 1 を使用してクリーン セッションの使用を示します。
MQTT 5.0 では、クリーン セッションはクリーン スタートとセッション有効期限間隔に分割されます。
MQTT V3
という名前の接続を作成し、Clean Session を false に設定して、MQTT バージョン 3.1.1 を選択します。
接続が成功したら、clean_session_false
トピックにサブスクライブし、QoS を 1 に設定します。
サブスクリプションが成功したら、右上隅の切断ボタンをクリックして切断します。
次に、MQTT バージョンを 3.1.1 に設定して MQTT_V3_Publish
という名前の接続を作成します。接続が成功したら、 3 つのメッセージを clean_session_false
トピックに公開します。
次に、MQTT_V3
を選択して接続し、[接続] ボタンをクリックしてサーバーに再接続します。3 つのオフライン メッセージが表示されます。
メッセージを送信します
MQTT クライアントは、サーバーへの CONNECT リクエストを開始するときに、ウィル メッセージ フラグを送信するかどうかを選択し、ウィル メッセージの件名とペイロードを指定できます。
MQTT クライアントが異常にオフラインになった場合 (切断前に DISCONNECT メッセージをサーバーに送信せずに)、MQTT サーバーは will メッセージを発行します。
この機能を説明するために、Last Will
という名前の接続を作成します。効果をすぐに確認するために、Keep Alive を 5 秒に設定します。
- 遺言トピックは
last_will
に設定されています。 - Last-Will QoS は
1
に設定されています。 - Last-Will Retain は
true
に設定されています。 - Last-Will ペイロードは
offline
に設定されます。
接続に成功した後、5 秒以上コンピュータ ネットワークを切断し (クライアントの異常な切断をシミュレートします)、その後ネットワークを復元します。
次に、シンプル デモ接続を開始し、last_will
トピックを購読します。 Last Will 接続セットアップのための Will メッセージを受け取ります。
この記事では、MQTT の基本的な概念と使用手順を詳しく紹介しますので、この記事で学んだ内容に従って MQTT プロトコルを使用してみてください。