ブローカー MQTT クライアント オプションを構成する
重要
この設定では、Broker リソースを変更する必要があります。 この設定は、Azure CLI または Azure portal を使用して、初期デプロイ時にのみ構成されます。 "ブローカー" 構成の変更が必要な場合は、新しいデプロイが必要です。 詳細については、「既定のブローカーをカスタマイズする」を参照してください。
MQTT ブローカーの高度なクライアント オプションは、ブローカーが MQTT クライアントとやりとりする方法を制御します。 これらの設定は接続中にブローカーとクライアントの間でネゴシエートされるもので、セッションの有効期間、メッセージの有効期間、受信最大数、キープ アライブなどがあります。 Azure IoT Operations に固有の設定は、サブスクライバー キューの制限のみです。
利用可能な設定の完全なリストについては、ClientConfig API リファレンスを参照してください。
多くのシナリオでは、既定のクライアント設定で十分です。 MQTT ブローカーの既定のクライアント設定をオーバーライドするには、Broker リソースの advanced.clients
セクションを更新します。 現在、このオーバーライドは、az iot ops create
コマンドを使用して IoT Operations をデプロイするときに、--broker-config-file
フラグを使用する場合のみサポートされています。
まず、次の例に示すような JSON 形式の Broker 構成ファイルを用意します。
{
"advanced": {
"clients": {
"maxSessionExpirySeconds": 282277,
"maxMessageExpirySeconds": 1622,
"subscriberQueueLimit": {
"length": 1000,
"strategy": "DropOldest"
},
"maxReceiveMaximum": 15000,
"maxKeepAliveSeconds": 300
}
}
}
その後、次のコマンドのように、--broker-config-file
フラグを指定して az iot ops create
コマンドを使用して IoT Operations をデプロイします。 (簡潔にするために、その他のパラメーターは省略されています。)
az iot ops create ... --broker-config-file <FILE>.json
詳細については、高度な MQTT ブローカー構成の Azure CLI サポートと Broker の例に関するページを参照してください。
サブスクライバー キューの制限
MQTT ブローカーは、配信待ちの QoS 1 メッセージを含むキューをサブスクライバーごとに保持します。 メッセージは、パブリッシャーから受信されると、このキューに追加されます。 これらのメッセージは、配信後、サブスクライバーからの PUBACK メッセージで確認された後に削除されます。 サブスクライバーがメッセージを確認できるよりも早くメッセージが到着した場合、またはサブスクライバーが永続セッションでオフラインの場合、キューが大きくなる可能性があります。
MQTT ブローカーはこれらのメッセージをディスクにバッファーしてメモリを節約できますが、この方法では常に十分とは限りません。 ディスク バッファーが設定されていないか、他のサブスクライバーによってディスク バッファーがいっぱいになっている可能性があります。 したがって、サブスクライバー キューの制限は、ブローカーが 1 人のサブスクライバーに大量のメモリを使用させないようにするのに役立ちます。
サブスクライバー キューの制限には次の 2 つの設定があります。
長さ: 1 人のサブスクライバーに対してキューに登録されるメッセージの最大数。 キューがいっぱいで新しいメッセージが到着した場合、ブローカーは構成された戦略に基づいてメッセージをドロップします。
戦略: キューがいっぱいのときに使用する戦略。 戦略には次の 2 つがあります。
- なし: セッションが期限切れにならない限り、メッセージは削除されず、キューは無期限に拡張します。 これが既定の動作となります。
- DropOldest: キューで最も古いメッセージがドロップされます。
この制限は、サブスクライバーの送信キューにのみ適用されます。このキューは、処理中のキューがいっぱいであるためにパケット ID が割り当てられていないメッセージを保持します。 この制限は、処理中のキューには適用されません。
制限はバックエンド パーティションごとに適用されるため、MQTT ブローカーはクラスター全体でサブスクライバーの送信メッセージの合計数を保証することはできません。 たとえば、長さを 10,000 に設定しても、サブスクライバーが最大 10,000 のメッセージを受信できるという意味ではありません。 代わりに、最大 10,000 * number of partitions * number of backend workers
件のメッセージを受信できます。
襲いサブスクライバー
遅いサブスクライバーとは、着信メッセージの速度についていけない加入者のことです。 この問題は、サブスクライバーのメッセージ処理が遅い場合、接続が切断されている場合、またはオフラインの場合に発生します。 サブスクライバー キューの制限は、遅いサブスクライバーが大量のメモリを使用しないようにするのに役立ちます。
メッセージの有効期間
maxMessageExpirySeconds
設定は、メッセージが期限切れになるまでにキューにとどまることができる時間を制御します。 メッセージが最大有効期間より長くキューにとどまると、そのメッセージは期限切れとしてマークされます。 ただし、期限切れのメッセージはキューの先頭に到達した時にのみ破棄されます。 この受動的な期限切れメカニズムは、古いメッセージが最終的に削除されるようにすることで、メモリ使用量を管理するのに役立ちます。
セッションの有効期間
maxSessionExpirySeconds
設定はサブスクライバー キューの制限と連動し、メッセージがキューに無期限に保持されないようにします。 セッションの有効期限が切れると、そのセッションのキューにあるメッセージはすべて削除されます。 この方法は、最終的にキュー全体をクリアすることで、オフライン サブスクライバーがメモリを使いすぎないようにするのに役立ちます。
メッセージの有効期間とセッションの有効期間は、遅いサブスクライバーやオフライン サブスクライバーを管理し、メモリ使用量を効率化するために重要です。