AWS IoT Core でスロットリングが発生した場合の MQTT メッセージの挙動を教えてください

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

困っていた内容

IoT Core への MQTT メッセージの送信(Publish)には、デフォルトで最大 500 件/秒のクォータ(「Publish requests per second per connection」)が設定されていますが、AWS IoT Device SDK を利用してクォータを超える数のメッセージ送信を試みた際、それらのメッセージはどのように扱われるのでしょうか?

また、メッセージ送信時に指定した QoS オプション(0 or 1)によって、挙動は異なるのでしょうか?

どう対応すればいいの?

Publish のスロットリングが発生した場合でも、MQTT 接続は切断されない動作となります。

MQTT クライアントライブラリや、デバイス側の実装に依存するものとなりますが、QoS 0 の場合、一般的にはメッセージの動作は行われない動作となり、スロットリングされたメッセージはロストされます。

QoS 1 の場合、IoT Core からの PUBACK を受信しないことにより、一般的にはメッセージ再送を行う、もしくはタイムアウトエラーとなる動作となリます。 再送により、IoT Core 側で受信されると、メッセージはロストしません。

参考資料