MergeMultiple
Descripcion
Sección titulada «Descripcion»El modulo mergeMultiple es un nodo de convergencia que espera y combina datos de multiples ramas paralelas del workflow. Cuando un flujo se divide en varias ramas (por ejemplo, mediante un Decision o Switch), mergeMultiple espera a que todas las ramas predecesoras hayan completado su ejecucion antes de continuar. Utiliza la base de datos (tabla merge_states) para almacenar los datos parciales de cada rama y verificar cuando se han recibido todos. Soporta iteraciones anidadas con claves de merge unicas por nivel y grupo. Incluye un mecanismo de timeout configurable (5 minutos por defecto) para evitar bloqueos si una rama nunca llega, y proteccion contra re-ejecuciones fantasma.
Configuracion
Sección titulada «Configuracion»Parametros
Sección titulada «Parametros»| Parametro | Tipo | Requerido | Descripcion |
|---|---|---|---|
| (sin parametros configurables por el usuario) | - | - | Este modulo se configura automaticamente basandose en las conexiones del workflow. Los modulos predecesores se detectan automaticamente. |
{ "nextModule": "siguiente_modulo", "data": { "merged": { "rama_A": { "datos": "de rama A" }, "rama_B": { "datos": "de rama B" } }, "array": [ { "source": "rama_A", "data": { "datos": "de rama A" } }, { "source": "rama_B", "data": { "datos": "de rama B" } } ], "items": [], "sources": ["rama_A", "rama_B"], "missingSources": [], "count": 2, "totalItems": 0, "status": "complete", "timedOut": false }}Ejemplo de Uso
Sección titulada «Ejemplo de Uso»Caso basico
Sección titulada «Caso basico»{ "label": "mergeMultiple"}- Los modulos predecesores se detectan automaticamente a partir de las conexiones del workflow, o se pueden especificar manualmente via
config.predecessors. - Los datos de cada rama se almacenan en la tabla
merge_statesde la base de datos. - La clave unica de merge se construye como:
{workflowId}_{moduleName}_{mergeGroupKey}_{mergeLevel}. - Timeout configurable con
config.mergeTimeout(en milisegundos). Por defecto: 300000ms (5 minutos). Si expira, continua con los datos disponibles y marcatimedOut: true. - Cuando el nodo Decision salta una rama, automaticamente inserta un registro “skipped” para desbloquear este merge.
- Proteccion contra re-ejecuciones fantasma: si el merge ya se completo para la misma clave, ignora la ejecucion duplicada.
- La salida incluye multiples formatos:
merged(objeto por source),array(array de objetos),items(items unificados de todas las ramas). - Crea automaticamente la tabla
merge_statessi no existe. - Si faltan predecesores, retorna el status
pendingcon la lista de modulos faltantes y el progreso.
Nodos Relacionados
Sección titulada «Nodos Relacionados»- Decision - divide el flujo en dos ramas true/false
- Switch - divide el flujo en multiples rutas
- Router - enruta por valor de campo
- MergeIterator - merge para iteraciones
- MergeResults - merge avanzado con memoria