このトピックでは、Message Queuing Telemetry Transport(MQTT)5.0 のセッション有効期限間隔機能について説明します。
機能の説明
セッション有効期限間隔機能を使用すると、クライアントとブローカー間のセッションが終了した後のセッションステータスデータの保持期間を指定できます。セッションステータスデータには、未確認のサービス品質(QoS)1 メッセージとクライアントサブスクリプションが含まれます。クライアントが MQTT ブローカーに接続するときに、CONNECT メッセージのセッション有効期限間隔パラメーターを設定して、セッション有効期限間隔を指定できます。
制限
セッション有効期限間隔パラメーターを設定しない場合、デフォルト値 0 が使用されます。これは、切断後すぐにセッションが期限切れになることを指定します。セッション有効期限間隔パラメーターに 10 分未満の保持期間を指定することはできません。10 分未満の値を指定すると、10 分が使用されます。
セッション有効期限間隔パラメーターの最大値は 2147483647 です。
ポイントツーポイント(P2P)メッセージのみがサブスクライブされている場合、セッション有効期限間隔機能はサポートされていません。
使用上の注意
セッション有効期限間隔パラメーターの値には、次のルールが適用されます(単位:秒)。
値 0 は、セッション終了後すぐにセッションが期限切れになることを指定します。
0 より大きい値は、セッションが指定された期間保持されることを指定します。
シナリオ
クライアント再接続:車載インターネット(IoV)などの不安定な環境またはモバイル環境では、クライアントが頻繁に切断される可能性があります。セッション有効期限間隔を長く指定することで、再確立後にセッションをシームレスに回復できます。
一時的なデバイス接続:データを 1 回だけ報告するために使用されるデバイスや、ネットワークに一時的に参加するセンサーなど、ブローカーに一時的に接続するデバイス、または少量のデータを送信した後にブローカーから切断するデバイスには、短いセッション有効期限間隔を指定できます。これにより、ブローカーリソースが解放され、アイドルセッションがストレージ容量を占有するのを防ぎます。
セキュリティとプライバシー保護:データの機密性とプライバシー要件が高いアプリケーションの場合、ビジネス要件に基づいてセッション有効期限間隔を指定することで、クライアントが長期間非アクティブになった後にセッションステータスデータが自動的にクリアされるようにすることができます。これにより、データ漏洩のリスクが軽減されます。
MQTT 5.0 のセッション有効期限間隔機能を使用すると、アプリケーションシナリオに基づいてセッション有効期限間隔を柔軟に変更して、最適なシステムパフォーマンス、高いリソース使用率、優れたユーザーエクスペリエンスを確保できます。
例
モノのインターネット(IoT)デバイスは、MQTT ブローカーから頻繁に切断し、再接続する必要があります。デバイスが切断された後にサブスクリプションとメッセージが失われないようにするには、MQTT 5.0 のセッション有効期限間隔機能を使用します。
次のセクションでは、デバイスの最初の接続時と後続の再接続時にこの機能を使用する方法について説明します。
最初の接続
デバイスが MQTT ブローカーに初めて接続するとき、CONNECT メッセージがブローカーに送信され、[セッション有効期限間隔] パラメーターが 4 時間に設定されます。この値は、サブスクライブされたメッセージやキュー内のメッセージなどのセッションステータスデータが、デバイスが切断された後、最大 4 時間保持されることを指定します。
CONNECT
ClientId: IoT_Device123
Session Expiry Interval: 14400 // セッション有効期限間隔を 4 時間に指定します。単位:秒。
Clean Start: 0 // ブローカーが既存のセッションを引き続き使用することを指定します。
// CONNECT パケットに必要なその他の情報。
4 時間の保持期間内にネットワークの問題が原因でデバイスが MQTT ブローカーから切断された場合、ブローカーはデバイス内のすべてのサブスクライブ済みメッセージと未確認メッセージを保持します。
再接続
CONNECT
ClientId: IoT_Device123
Session Expiry Interval: 14400 // セッション有効期限間隔が引き続き 4 時間であることを指定します。
Clean Start: 0 // 以前に保持されたセッションステータスデータを使用するようにブローカーに通知します。
// CONNECT パケットに必要なその他の情報。
IoT デバイスが MQTT ブローカーに再接続し、セッションが期限切れになっていない場合、ブローカーは以前に保持されたセッションステータスデータを使用します。この場合、デバイスによってサブスクライブされ、受信されていないメッセージは、再接続後にデバイスに送信されます。
タイムアウト
4 時間後に IoT デバイスが MQTT ブローカーに再接続されない場合、ブローカーは以前に保持されたセッションステータスデータをクリアします。デバイスが再接続された後、新しいセッションを確立し、IoT デバイスに必要なトピックをサブスクライブする必要があります。この場合、以前のキュー内のメッセージは失われます。