👀
Azure IoT Edge のルート定義における priority について
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)異常検知
アップストリームの接続が弱かったり、定期的にオフラインになるようなネットワーク状況を想定する。
定期的にアップロードするセンサーデータとは別に異常検知データをアップロードする場合、そのルートの優先度を高く設定することで速やかなアップロードが可能となる。
例2)処理の割り込み
大量のメッセージを処理するモジュールが存在するときに、外部情報によってその処理を中断したいケースを想定する。
中断を指示するメッセージルートの優先度を高く設定することで、累積したメッセージの処理をスキップすることができる。
Discussion