次の方法で共有


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

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