Conector On Change
Descripción General
Sección titulada «Descripción General»El conector On Change reenvía una carga sólo cuando al menos uno de sus campos monitorizados difiere del último valor observado. Es la herramienta estándar para colapsar flujos verbosos que repiten las mismas lecturas sin cambios.
Tipo de Conector: MeddleOnChange
Modo Any
Sección titulada «Modo Any»Emite cuando cualquier clave monitorizada cambia respecto a la carga anterior.
{ "type": "MeddleOnChange", "config": { "keys": ["temperature", "pressure"], "mode": "any", "tolerance": 0.1, "emitFirst": true }}Si temperature o pressure difieren en más de 0.1, la carga se emite.
Modo All
Sección titulada «Modo All»Emite sólo cuando todas las claves monitorizadas están presentes en la carga y todas ellas han cambiado.
{ "type": "MeddleOnChange", "config": { "keys": ["x", "y", "z"], "mode": "all", "tolerance": 0, "emitFirst": false }}Útil cuando las cargas transportan una instantánea atómica y un cambio parcial no debería propagarse.
Parámetros de Configuración
Sección titulada «Parámetros de Configuración»- keys (obligatorio, único): Array de claves de la carga a monitorizar
- mode (obligatorio):
any(emite cuando al menos una clave cambia) oall(emite sólo cuando todas las claves cambian) - tolerance: Tolerancia absoluta para comparaciones numéricas (por defecto
0). Dos números se consideran iguales cuando|a - b| <= tolerance. - emitFirst: Cuando es
true, la primera carga observada se emite (y siembra la línea base). Cuando esfalse, la primera carga se consume silenciosamente.
Semántica de Comparación
Sección titulada «Semántica de Comparación»- Los valores numéricos se convierten a
float64y se comparan con la tolerancia configurada - Los valores no numéricos usan igualdad estricta
- Las claves ausentes de una carga no cuentan como cambios y no actualizan la línea base
- La línea base se actualiza para cada clave presente en la carga entrante, independientemente de si provocó una emisión
Casos de Uso
Sección titulada «Casos de Uso»- Reducir el tráfico MQTT/Kafka descartando telemetría idéntica repetida
- Detección de cambio de estado para campos de estado (ej. reenviar sólo cuando
statuscambia) - Limitar las escrituras de almacenamiento en una base de datos de series temporales
- Debouncing basado en tolerancia de lecturas analógicas ruidosas
Ejemplo: Reenvío de Cambio de Estado
Sección titulada «Ejemplo: Reenvío de Cambio de Estado»{ "type": "MeddleOnChange", "config": { "keys": ["status"], "mode": "any", "tolerance": 0, "emitFirst": true }}Sólo las cargas donde status difiere de la observación anterior se propagan hacia abajo, independientemente de la frecuencia con la que publique la fuente.
Ejemplo: Tolerancia en Sensores Analógicos
Sección titulada «Ejemplo: Tolerancia en Sensores Analógicos»{ "type": "MeddleOnChange", "config": { "keys": ["temperature"], "mode": "any", "tolerance": 0.5, "emitFirst": true }}El ruido del sensor dentro de ±0.5 se ignora; sólo el movimiento real activa una emisión descendente.
Mejores Prácticas
Sección titulada «Mejores Prácticas»- Define
toleranceligeramente por encima del jitter conocido del sensor para suprimir el ruido sin perder transiciones reales - Usa
mode: "all"sólo cuando las cargas contienen verdaderamente instantáneas coherentes; de lo contrario,anyes el valor por defecto más seguro - Combina con Aggregation cuando también necesites resúmenes periódicos del flujo deduplicado
- Mantén la lista
keyspequeña — cada clave monitorizada cuesta una comparación por carga
Conectores Relacionados
Sección titulada «Conectores Relacionados»- Filter - Descartar claves no deseadas antes de la deduplicación
- Aggregation - Resumen basado en ventanas
- Rate Limiter - Limitar el rendimiento independientemente del cambio