コンテンツにスキップ

Routerコネクタ

Routerコネクタは、各受信ペイロードに対してMXL条件のリストを評価し、最初にマッチしたルートでタグ付けされたペイロードを発行します。これを使用して、単一のストリームを複数の論理チャネルに分割し、ダウンストリームのコネクタがそれらでブランチできるようにします。

コネクタタイプ: MeddleRouter

{
"type": "MeddleRouter",
"config": {
"routes": [
{ "condition": "temperature > 80", "tag": "critical" },
{ "condition": "temperature > 50", "tag": "warning" },
{ "condition": "temperature <= 50", "tag": "normal" }
],
"defaultTag": "unknown"
}
}

コネクタはルートを上から下に評価します。conditiontrueに評価される最初のものが勝ち、そのtagが予約されたキー_routeの下にペイロードに書き込まれます。

マッチしたすべてのペイロードに_routeフィールドが追加されます:

{
"temperature": 92.5,
"sensor_id": "S-01",
"_route": "critical"
}

ダウンストリームコネクタ(Filter、Trigger、Notificationなど)は、_routeでブランチして各タグを異なる宛先に送信できます。

  • routes(必須、最小1):ルート定義の順序付き配列。各ルートは以下を持ちます:
    • condition(必須):ペイロードに対して評価されるMXL式
    • tag(必須):条件がマッチした時に_routeに書き込まれる文字列
  • defaultTag: どのルートにもマッチしない場合に適用されるオプションのタグ。未設定でどのルートにもマッチしない場合、ペイロードはドロップされ、エラーが発行されます。

ルートはMXL(Meddle Expression Language)を使用します — TriggerおよびAlertで使用されるのと同じ式構文です。

temperature > 80
status == "active" && pressure < 10
humidity >= 60 || temperature > 25
count != 0

条件は起動時にパースされ、無効なMXLはコネクタの起動を妨げます。

  1. 重大度ベースのルーティング — テレメトリを通常/警告/重大ストリームに分割
  2. マルチテナントファンアウト — サイト、顧客、デバイスクラスでペイロードをタグ付け
  3. ワークフローブランチング — 異なるペイロード形状を異なるダウンストリームパイプラインに指示
  4. A/Bルーティング — トラフィックのサブセットを実験的なプロセッサに送信
{
"type": "MeddleRouter",
"config": {
"routes": [
{ "condition": "site_id == \"plant-a\"", "tag": "plant_a" },
{ "condition": "site_id == \"plant-b\"", "tag": "plant_b" },
{ "condition": "site_id == \"plant-c\"", "tag": "plant_c" }
],
"defaultTag": "unassigned"
}
}

各ペイロードは発生元サイトでタグ付けされ、認識可能なsite_idを持たないペイロードはunassignedチャネルに分類されます。

{
"type": "MeddleRouter",
"config": {
"routes": [
{ "condition": "vibration > 5.0 || temperature > 100", "tag": "critical" },
{ "condition": "vibration > 2.0 || temperature > 70", "tag": "warning" },
{ "condition": "true", "tag": "normal" }
]
}
}

最後のエントリとしてのtrue条件は暗黙のデフォルトとして機能します。_routeフィールドは、Notification(critical -> Slack、warning -> email)またはFilter(normal -> drop)を駆動できます。

  • ルートを最も具体的なものから最も一般的なものへと並べる。最初のマッチのみが勝つ
  • defaultTagを使用して、すべてのペイロードがコネクタから出ることを保証 — そうでないとマッチしないペイロードはエラーになります
  • MXL条件は副作用がなく、上流が確実に投入するペイロードフィールドに基づくようにする
  • 順序のみに依存する重複するルートを避ける — 明示的な条件の方が保守しやすい
  • ダウンストリームのFilterまたはTriggerコネクタは、同じMXLを再評価するのではなく_routeでブランチすべき