Saltearse al contenido

MergeMultiple

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.

ParametroTipoRequeridoDescripcion
(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
}
}
{
"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_states de 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 marca timedOut: 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_states si no existe.
  • Si faltan predecesores, retorna el status pending con la lista de modulos faltantes y el progreso.