Skip to content
Art2link ESB HomeDocumentationBlogContact
Updated May 5, 2026
Core concepts/Ports/Null port
Concept

Null port

Null ports subscribe to the bus and discard the message. A null port is a one-way send port without an adapter: the optional variable, map, and pipeline stages still run before the discard, so audit entries, tracking metadata, and variable captures survive.

04 PORT TYPE · NULL Null port Subscribes to the bus and discards the message, keeps unsubscribed messages from accumulating DIRECTION ✕ Terminal MODES One-way only ADAPTER ✗ None MESSAGE TYPE

A null port is a flavour of send port whose dispatch step is replaced by discarding the message. The flow runs the standard outbound stages, variable assignments, outbound map, outbound pipeline, more variable assignments, and then deletes the message. Null ports are one-way only; there is no return path.

The use case is straightforward but specific: prevent messages from sitting on the bus indefinitely when no real subscriber wants them. By giving an unwanted message a subscriber that simply consumes and discards it, you keep the bus tidy.

Subscription expression, required; identifies which messages on the bus this null port should consume
Outbound map & pipeline, with surrounding variable assignments, optional; same as a send port's outbound flow
No adapter, no return path, no Message Type, the message is discarded after the outbound stages

In the port editor a null port is a trimmed send port: Type Null, the Adapter picker empty, Way pinned to One and no Response group in the sidebar; the Solicit group (Bus → Adapter) keeps the same five tabs, Subscription, Open Variables, Map, Pipeline, Close Variables.

The null port has a single map hookpoint on the outbound side. It takes the same three configurations as every other port-side map: None (no transform), Typed (a table of maps keyed on source Message Type), and Universal (a single map applied regardless of source). See Maps, Selecting a map for the concept. Typed table rows are unique by source Message Type, the UI enforces that.

Because the message is discarded after the outbound stages, no Publish Message Type Fallback applies, nothing ever publishes. The map runs for its side effects: variable captures, tracking entries, audit metadata. Typed is genuinely useful when a single null port consumes messages of different Message Types and you want a different transform for each before the variables are captured; otherwise Universal or None usually does the job.

None Bus MT: X Discard No transform Message discarded as-is Typed Bus MT: B SOURCE MT → MAP A B C Map table MT: B′ Discard Picked by source MT Map runs for side effects, then discard Universal Bus MT: any Map MT: Y Discard One map, any source Map runs for side effects, then discard
NULL PORT Internal message bus - message picked up via the port subscription expressionBusREFERENCE Application Variables assigned values immediately after entering the port1{ x }VariablesOPEN Outbound map - transforms the message from the canonical shape into the destination shape2Map Outbound pipeline - post-processing such as compression, encryption, signing, or framing3Pipeline Application Variables assigned values immediately before the message is discarded4{ x }VariablesCLOSE Message is discarded; the flow ends here5Discarded SOLID = REQUIRED  ·  DASHED = OPTIONAL  ·  GRAY TINT = TERMINATION

The port’s subscription expression matches a message on the bus and pulls it into the null port. The configured stages then run in order before the message is dropped.

1
Open Variables (optional)

An optional set of variable assignments runs as soon as the subscription expression matches and the message enters the port. This is the place to capture context from the message that needs to survive the discard, correlation IDs, partner identifiers, audit fields, or anything that should appear on the Tracking screen.

2
Outbound map (optional)

The map step has three modes, None, Typed (a table of maps keyed on source Message Type), or Universal (one map regardless of source). Because the message is discarded after the outbound stages, no Publish Message Type Fallback applies on this side. The map runs purely for its side effects, reshaping the in-flight message so the following stages can capture different values from it. See the Map configuration section above.

3
Outbound pipeline (optional)

The outbound pipeline can apply intermediate processing, useful when the goal is to extract or compute values that the on-exit variable assignments will need, or to invoke a custom component for audit or external notification before the discard.

4
Close Variables (optional)

A second optional variable-assignment stage runs after the pipeline, immediately before the message is dropped. The values captured here, together with the on-entry capture, are everything that will survive the null port, the message body itself is about to be gone.

5
Message discarded, the flow ends here

The null port has no adapter and no return path. The in-flight message is deleted. What survives is everything the previous stages emitted out-of-band, captured variables, tracking entries, audit records, and any side effects invoked by pipeline components.

Result. The message is gone. Anything captured during the optional stages, variable values, tracking metadata, audit entries, survives independently of the discarded message.

A null port carries Tracking and a subscription expression but no Exception Message Type field: a run whose map or pipeline stage fails is recorded as an Error, with no exception path to re-publish on. Choose one of the three Tracking levels for what each run persists, and write a subscription expression, the Boolean filter evaluated against every message on the bus, to select which messages this port consumes. Tracking and Subscriptions behave as on every port and are documented once, with diagrams and the full token list, under Options available on every port and Subscriptions and Message Types on the Ports overview.

That's the null port

Anything not subscribed by another port can land here, leaving variables and tracking intact. Closes the loop on the four port types, back to the Ports overview.