Ir al contenido

Conector Router

El conector Router evalúa una lista de condiciones MXL contra cada carga entrante y emite la carga etiquetada con la primera ruta coincidente. Úsalo para dividir un único flujo en múltiples canales lógicos sobre los que los conectores descendentes pueden ramificarse.

Tipo de Conector: MeddleRouter

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

El conector evalúa las rutas de arriba abajo. Gana la primera cuya condition se evalúe como true; su tag se escribe en la carga bajo la clave reservada _route.

Cada carga coincidente se enriquece con un campo _route:

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

Los conectores descendentes (Filter, Trigger, Notification, etc.) pueden ramificarse según _route para enviar cada etiqueta a un destino diferente.

  • routes (obligatorio, mínimo 1): Array ordenado de definiciones de ruta. Cada ruta tiene:
    • condition (obligatorio): Una expresión MXL evaluada contra la carga
    • tag (obligatorio): Cadena escrita en _route cuando la condición coincide
  • defaultTag: Etiqueta opcional aplicada cuando ninguna ruta coincide. Si no se define y ninguna ruta coincide, la carga se descarta y se emite un error.

Las rutas usan MXL (Meddle Expression Language) — la misma sintaxis de expresiones usada por Trigger y Alert.

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

Las condiciones se parsean al inicio; un MXL inválido impide que el conector arranque.

  1. Enrutamiento basado en severidad — divide la telemetría en flujos normal / warning / critical
  2. Fan-out multi-tenant — etiqueta cargas por sitio, cliente o clase de dispositivo
  3. Ramificación de flujos de trabajo — dirige diferentes formas de carga a diferentes pipelines descendentes
  4. Enrutamiento A/B — envía un subconjunto del tráfico a un procesador experimental
{
"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"
}
}

Cada carga se etiqueta con su sitio de origen, y cualquier carga sin un site_id reconocido cae en el canal 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" }
]
}
}

Una condición true como última entrada actúa como un valor por defecto implícito. El campo _route puede entonces dirigir Notification (critical -> Slack, warning -> email) o Filter (normal -> descartar).

  • Ordena las rutas de la más específica a la más general; sólo gana la primera coincidencia
  • Usa defaultTag para garantizar que toda carga salga del conector — de lo contrario, las cargas no coincidentes se vuelven errores
  • Mantén las condiciones MXL libres de efectos secundarios y basadas en campos de la carga que el upstream garantice rellenar
  • Evita rutas superpuestas que dependan sólo del orden — las condiciones explícitas son más fáciles de mantener
  • Los conectores Filter o Trigger descendentes deberían ramificar sobre _route en lugar de reevaluar la misma MXL
  • Trigger - Gating MXL de condición única
  • Filter - Descartar o mantener cargas por clave
  • Referencia MXL - Documentación completa de MXL