次の方法で共有


ブローカー 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 設定はサブスクライバー キューの制限と連動し、メッセージがキューに無期限に保持されないようにします。 セッションの有効期限が切れると、そのセッションのキューにあるメッセージはすべて削除されます。 これは、最終的にキュー全体をクリアすることで、オフライン サブスクライバーがメモリを使いすぎないようにするのに役立ちます。

メッセージの有効期間とセッションの有効期間は、遅いサブスクライバーやオフライン サブスクライバーを管理し、メモリ使用量を効率化するために重要です。

次のステップ