👀

Azure IoT Edge のルート定義における priority について

2021/03/08に公開

Azure IoT Edge のルート定義における priority について

IoT Edge のルート定義に priority という項目が増えていたので、内容の調査と利用ケースについて考えてみました。

前提条件

  • Edge Hub モジュールのバージョンが 1.0.10 以降であること
    (2021/3/8 時点での最新バージョンは 1.1.0)
  • Edge Hub のスキーマバージョンが 1.1 であること

Azure Portal の場合
"前提条件"

JSON ドキュメントの場合(該当箇所のみ抜粋)

{
    "content": {
        "modulesContent": {
            "$edgeAgent": {
                "systemModules": {
                    "edgeHub": {
                        "settings": {
                            "image": "mcr.microsoft.com/azureiotedge-hub:1.1"
                        }
                    }
                }
            },
            "$edgeHub": {
                "properties.desired": {
                    "schemaVersion": "1.1"
                }
            }
        }
    }
}

設定方法

  • ルート定義の priority に 0 ~ 9 の値を設定
    ( 0 が最も高い)

Azure Portal の場合
"設定方法"

JSON ドキュメントの場合(該当箇所のみ抜粋)

{
    "content": {
        "modulesContent": {
            "$edgeHub": {
                "properties.desired": {
                    "routes": {
                        "route1": {
                            "priority": 1,
                            "route": "FROM /messages/modules/module01/outputs/output1 INTO BrokeredEndpoint(\"/modules/module02/inputs/input1\")" 
                        },
                        "route2": {
                            "priority": 1,
                            "route": "FROM /messages/modules/module01/outputs/output1 INTO $upstream" 
                        },
                        "route3": {
                            "priority": 0,
                            "route": "FROM /messages/modules/module02/outputs/output1 INTO $upstream" 
                        }
                    }
                }
            }
        }
    }
}

どういった時に使うか

priority の効果については公式ドキュメント[1]より抜粋

メッセージは、エンドポイントに基づいてキューに登録されます。 特定のエンドポイントを対象とするすべての優先度 0 メッセージは、同じエンドポイントを対象とする優先度 1 メッセージが処理される前にすべて処理されます。 同じエンドポイントに対して複数のルートが同じ優先順位を持つ場合、そのメッセージは先着順で処理されます。 優先順位が指定されていない場合、そのルートは最も低い優先順位に割り当てられます。

つまり、モジュール間のメッセージ通信でキューにメッセージが滞留する可能性がある場合に、優先的に送信したいメッセージが存在するのであれば利用を検討する。

例1)異常検知

アップストリームの接続が弱かったり、定期的にオフラインになるようなネットワーク状況を想定する。
定期的にアップロードするセンサーデータとは別に異常検知データをアップロードする場合、そのルートの優先度を高く設定することで速やかなアップロードが可能となる。
"例1-1"
"例1-2"

例2)処理の割り込み

大量のメッセージを処理するモジュールが存在するときに、外部情報によってその処理を中断したいケースを想定する。
中断を指示するメッセージルートの優先度を高く設定することで、累積したメッセージの処理をスキップすることができる。
"例2ー1"
"例2-2"

脚注
  1. https://docs.microsoft.com/ja-jp/azure/iot-edge/module-composition ↩︎

Discussion