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