Skip to main content
A message is the unit of data on an edge. It is a payload plus labels about the payload. A trigger can emit many messages in one execution, and a processor can turn one message into several or several into one.

Anatomy

Messages are immutable. A node never edits a message it received; it builds a new one from it with a changed payload or label. Two branches that receive the same message can therefore never disturb one another. The immutability is shallow: values inside a payload are shared, so treat received payloads as read-only.

Identity across nodes

Deriving a message from an input keeps its message id, trace id and timestamp. Creating a brand-new message, as a trigger or a splitter does, assigns new ones. Because a message may be delivered more than once after a retry or resume, plugins that have side effects should de-duplicate on the message id. See Delivery and back-pressure.

Labels the engine adds

Reading a message in configuration

Node options can reference the incoming message with ${payload.field} and ${metadata.key}. See Variables and expressions.

Fields that are carried only

Messages also have optional header fields borrowed from classic messaging patterns: priority, expiration, reply-to, a format indicator, a retry counter and a control flag. They are carried along but the engine does not act on them: an expired message is delivered like any other, and reply-to does not route anything. Do not rely on them for behaviour. Execution priority is a different mechanism, set with yukta.priority in the start payload; see Admission and limits.

Limits and defaults