Nodes
A node is one step. It has anodeId that is unique within the workflow, a type naming the plugin that implements it, and a config object holding that plugin’s options.
The type decides the node’s role:
A workflow needs at least one trigger (no inbound edges) and at least one terminal (no outbound edges), with processors in between. A trigger may emit many messages in one execution.
Edges
An edge is a one-way connection from asource node to a target node. Every message a node emits is delivered to each of its outgoing edges, so a node with two outgoing edges feeds both children (a fan-out). The slowest child sets the pace; see Delivery and back-pressure.
Ports
A node can publish messages on a named output port. An edge can name the port it listens to withsourcePort:
The ports a node offers depend on its plugin. Examples: the process plugin routes by exit code to
success and failure, the HTTP plugin can route by status, the branch plugin offers one port per case, and the validate plugin sends rejected messages to invalid. The plugin reference lists each node’s ports.
The error port is built in. When a processor is configured with onError: ROUTE, a message that fails all its retries leaves on error, carrying the reason, so you can send it to a dead-letter node. Edges without a port never carry dead letters, so failures cannot leak into the normal path. See Failure handling.
Several parents: join rules
A node with several parents receives the messages of all of them. A join rule decides what happens when one parent fails. It is set per node withengine.trigger:
The rule belongs to the node, not to an individual edge.