MQTT - AWS IoT

MQTT

MQTT は、制約のあるデバイス用に設計され、軽量で広く採用されているメッセージングプロトコルです。詳細については、MQTT v3.1.1 の仕様を参照してください。

AWS IoT メッセージブローカーの実装は MQTT バージョン 3.1.1 に基づいていますが、次のように仕様とは異なります。

  • AWS IoT Core は MQTT サービス品質 (QoS) レベル 0 と 1 のみをサポートします。AWS IoT Core は、QoS レベル 2 でのパブリッシュまたはサブスクライブをサポートしていません。QoS 2 レベル 2 がリクエストされると、AWS IoT メッセージブローカーは PUBACK または SUBACK を送信しません。

  • AWS IoT Core では、QoS レベル 0 でトピックにサブスクライブすると、メッセージが 0 回以上配信されます。メッセージは複数回配信される場合があります。複数回配信されるメッセージは、異なるパケット ID を使用して送信される場合があります。これらの場合、DUP フラグは設定されません。

  • 接続リクエストに応答するとき、メッセージブローカーは CONNACK メッセージを送信します。このメッセージには、接続で前のセッションを再開するかどうかを示すフラグが含まれます。

  • クライアントがトピックにサブスクライブすると、メッセージブローカーは SUBACK を送信してから、クライアントが新しい一致するメッセージの受信を開始するまでに、遅延が生じる場合があります。

  • MQTT の仕様では、ブローカーがトピックに送信された最後のメッセージを保持して以後のすべてのトピックサブスクライバーに送信することをリクエストするように、パブリッシャーをプロビジョニングします。AWS IoT Core では、メッセージの保持はサポートされていません。ブローカーがメッセージを保持するようにリクエストされた場合、接続は切断されます。

  • メッセージブローカーは、クライアント ID を使用して、各クライアントを識別します。クライアント ID は MQTT ペイロードの一部としてクライアントからメッセージブローカーに渡されます。クライアント ID が同じ 2 つのクライアントがメッセージブローカーに同時に接続することはできません。あるクライアントが別のクライアントのクライアント ID を使用してメッセージブローカーに接続すると、新しいクライアント接続が受け入れられ、以前に接続されたクライアントは切断されます。

  • まれに、メッセージブローカーは、パケット ID が異なる同じ論理 PUBLISH メッセージを再送信する場合があります。

  • メッセージブローカーはメッセージと ACK の正しい受信順序を確保するわけではありません。

MQTT 経由で AWS IoT Core に接続するには、AWS IoT Device および Mobile SDK のいずれかを使用します。MQTT を使用して AWS IoT Core に接続する方法の例については、Python SDKbasicPubSub サンプルを参照してください。他の AWS IoT SDK にも同様のサンプルアプリがあります。

MQTT メッセージの認証とポートマッピングの詳細については、「プロトコル、ポートマッピング、認証」を参照してください。