MQTT プロトコルの入門: 簡単に始めて、中核となるポイントをすぐにマスターしましょう


ここに画像の説明を挿入します

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 の基本コンポーネントを理解した後、その一般的なワークフローを見てみましょう。

  1. クライアントは、TCP/IP プロトコルを使用してブローカーとの接続を確立します。、オプションで TLS/SSL 暗号化を使用して安全な通信を実現できます。クライアントは認証情報を提供し、セッション タイプ (クリーン セッションまたは永続セッション) を指定します。
  2. クライアントは、特定のトピックにメッセージを公開することも、トピックをサブスクライブしてメッセージを受信することもできます。クライアントがメッセージをパブリッシュすると、そのメッセージは MQTT ブローカーに送信され、クライアントがメッセージをサブスクライブすると、サブスクライブしたトピックに関連するメッセージを受信します。
  3. 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 リージョンで運用サポートが提供されます。

ここに画像の説明を挿入します

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 1Sensor 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 プロトコルを使用してみてください。

おすすめ

転載: blog.csdn.net/Qingai521/article/details/134805962
おすすめ