Skip to content
Art2link ESB HomeDocumentationBlogContact
Updated August 2, 2026
Core concepts/Ports/Receive port
Concept

Receive port

Receive ports are how messages enter Art2link ESB. Bound to a transport adapter, they accept incoming traffic and publish it to the bus through optional variable, pipeline, and map stages.

01 PORT TYPE · RECEIVE Receive port The entry point for messages into Art2link ESB DIRECTION ↓ Inbound MODES One-way · Two-way ADAPTER ✓ Required ADAPTER MESSAGE TYPE ✓ Required

From the bus, the message continues its journey: a send port, a loopback, or the response side of a two-way receive port picks it up.

Every receive port is configured as either one-way or two-way. One-way is fire-and-forget, the adapter accepts the message and disconnects. Two-way keeps the caller's connection open and waits for a matching response message to come back through.

Adapter, required; defines the transport the port listens on (HTTP listener, file pickup, scheduler, queue dequeue, etc.). See Adapters
Adapter Message Type, required; the Message Type stamped on the message the instant the adapter hands it to the next step inside the port. See Message types
Variable assignments, optional; can run before and after the pipeline and map stages, in both directions. See Variables
Inbound pipeline & map, optional; pre-processes and transforms the message on the way to the bus. See Pipelines and Maps
Outbound map & pipeline, optional, used only in two-way; reshapes and post-processes the response on the way back to the caller
Response Subscription Expression, required in two-way; identifies which message on the bus is the response to hand back to the caller

In the port editor the port’s Adapter Message Type is set on the General tab, in the same General Information panel as Name, Application, Port Type (set to Receive here), and Adapter. On a receive port the Solicit group is the inbound leg, sublabelled Caller → Bus, and lists the stages in their running order: Open Variables, Pipeline (an Inbound Pipeline selector), Map, Close Variables; the receive port’s Response group (Bus → Caller) is the outbound leg, holding the two-way return flow, and opens with Subscription. The two names point the other way round on a send port, so read them with the port type in hand; the four positions are set out in Components classify the Message Type.

Every message published to the bus carries a Message Type, and on a receive port the message has one from the first instruction onwards. The port’s Adapter Message Type is required, and the runtime stamps it the instant the adapter hands the message to the next step inside the port, ahead of Open Variables, the pipeline, and the map. There is no untyped window at the entry and nothing to fall back to, because the message is already typed before the first stage inside the port runs. The underlying property is Port.receivedMessageTypeId.

From there the type is restated, never assumed. Every message a pipeline component emits carries a Message Type set explicitly on the outgoing message, whether that is the same type the component was handed or a different one, and a component that splits an interchange into two hundred messages types all two hundred. A map replaces the type with the map’s target type. Emitting a message with no Message Type is not blocked by the platform, it simply leaves the downstream result undefined, so the rule is yours to keep. Naming a Message Type that is not defined in the Application is an error. The rule is identical wherever a pipeline is attached: see Components classify the Message Type for the definition of direction and of the typing rule.

The inbound map step then runs, or doesn’t. The Map Assignment setting takes three values: None (no transformation), Typed (a table of maps keyed on source Message Type; the row whose source matches the Message Type the message is carrying at that point is applied, a miss is a no-op), and Universal (a single map applied to every message regardless of source). Typed table rows are unique by source Message Type, the UI enforces that.

None Adapter MT: X Bus No transform Published MT = incoming MT Typed Adapter MT: B SOURCE MT → MAP A B C Map table MT: B′ Bus Picked by source MT Miss → no map applied Universal Adapter MT: any Map MT: Y Bus One map, any source Published MT = map target
Aligned with the BizTalk model. The Typed table mirrors the BizTalk receive port’s inbound maps grid, multiple maps on a single port, each keyed on a different source Message Type, dispatched at runtime by matching the incoming Message Type to a row.
ONE-WAY MODE

The receive port's job ends the moment the message reaches the bus. There is no response back to the caller, the adapter acknowledges receipt and disconnects. This is the model used by triggers (e.g. the scheduler adapter), file pickups, queue dequeues, and any flow where the upstream system does not expect a synchronous reply.

PORT-LEVEL REQUIREDAdapterMessage TypeSet at adapter handoff External system that initiates the request Caller REQUIREDAdapterWire-level protocolSee Adapters →{ x }OPTIONALVariablesOPENCapture contextSee Variables →OPTIONALPipelineINBOUNDPre-processSee Pipelines →OPTIONALMapINBOUNDNone / Typed / UniversalSee Maps →{ x }OPTIONALVariablesCLOSECapture for routingSee Variables → Internal message bus - request published here Bus
1
Adapter receives the message

The adapter is the only stage that is always present. It handles the wire-level conversation with the caller, accepting an HTTP request, opening a file, polling a schedule, dequeueing from a broker. Once the adapter has the message in hand, it hands control to the rest of the receive port.

2
Open Variables (optional)

An optional set of variable assignments runs before the pipeline. Capture values from the incoming message or its context, headers, query parameters, file name, sender identity, and store them as variables that downstream stages, routing rules, send ports, and tracking can reference later.

3
Inbound pipeline (optional)

A sequence of pipeline components that pre-process the message, typical examples are decompression, character-set normalization, signature verification, or splitting a multi-record file into individual messages. The pane itself is a single selector, Inbound Pipeline, defaulting to None. The message arrives here already carrying the port’s Adapter Message Type, and every message a component emits carries a Message Type of its own, set explicitly, so a split into two hundred messages means two hundred types set. See Components classify the Message Type.

4
Inbound map (optional)

Transforms the message from the source shape into the canonical shape used by the rest of the application. The Map step’s Map Assignment setting has three modes, None (skipped), Typed (a table of maps keyed on source Message Type; the row that matches the Message Type the message is carrying is applied), or Universal (one map applied to every message regardless of source). When a map runs, its target Message Type carries forward as what gets published. See the Adapter Message Type and map configuration section above. Maps are configuration-only and take effect on save.

5
Close Variables (optional)

A second optional variable-assignment stage runs after the map. This is the place to capture values from the transformed message, values that are often used by routing logic, by send ports later in the flow, or by activity tracking.

Result. The message is now published to the bus. The receive port's work is done; downstream subscribers, send ports, loopbacks, or the return side of a two-way receive port, pick it up from there.
TWO-WAY MODE

A two-way receive port runs the entire one-way flow above to publish the request to the bus, and then keeps the caller's connection open while it waits for a response message to appear on the bus. The matching is driven by the port's Response Subscription Expression, set on the Subscription tab at the top of the editor’s Response group, a Boolean expression evaluated against every message published to the bus. The first message that satisfies it is picked up as the response and delivered back to the caller through the mirror image of the inbound flow on this same port.

Note the order on the way out: map first, then pipeline, the inverse of the inbound order. The response is reshaped into the caller's expected format before the pipeline applies any transport-level post-processing such as signing, compression, or framing.

Map configuration on the response side mirrors the request side, None, Typed, or Universal. This is an outbound position, the response is leaving the bus rather than entering it, so there is no Adapter Message Type here: the message comes off the bus with the type it was published under, and that type drives the Typed-table lookup. It still matters on the way out, because it governs how the response is treated as it is framed for the caller, and any component in the outbound pipeline sets a Message Type on everything it emits just as it would anywhere else. See Components classify the Message Type.

None Bus MT: X Adapter No transform MT carries through Typed Bus MT: B SOURCE MT → MAP A B C Map table MT: B′ Adapter Picked by source MT Miss → no map applied Universal Bus MT: X Map MT: Y Adapter One map, any source Sent shape = map target PORT-LEVEL SETTINGS REQUIREDAdapterMessage TypeSet at adapter handoff REQUIREDResponse Sub ExprPORT-LEVELPicks the response stamped at the adapterpicks from bus External system - sends the request and receives the response on the still-open connection Caller EXTERNAL REQUEST →← RESPONSE REQUIREDAdapterREQUESTAccept the requestSee Adapters →{ x }OPTIONALVariablesOPENCapture contextSee Variables →OPTIONALPipelineINBOUNDPre-processSee Pipelines →OPTIONALMapINBOUNDNone / Typed / UniversalSee Maps →{ x }OPTIONALVariablesCLOSEPre-publishSee Variables → REQUIREDAdapterRESPONSEDeliver responseSee Adapters →{ x }OPTIONALVariablesCLOSEPre-deliverySee Variables →OPTIONALPipelineOUTBOUNDPost-processSee Pipelines →OPTIONALMapOUTBOUNDNone / Typed / UniversalSee Maps →{ x }OPTIONALVariablesOPENFrom busSee Variables → Internal message bus - request published here; response picked up via the Response Subscription Expression Bus REFERENCE
1
Open Variables (optional)

Once the port's Response Subscription Expression matches a message on the bus, that message is picked up as the response. Optional variable assignments run immediately, before the outbound map. Inject correlation values, derived headers, or any context-specific fields the response shape will need.

2
Outbound map (optional)

Transforms the response message from the canonical shape on the bus into the shape the original caller is expecting. Map configuration mirrors the request side, None, Typed (dispatched by source Message Type), or Universal (one map for any source). This is an outbound position, so there is no Adapter Message Type here: the message came off the bus with the type it was published under, and that is what the Typed table matches on.

3
Outbound pipeline (optional)

Applies post-processing on the way out, typical examples are compression, encryption, signing, or framing.

4
Close Variables (optional)

A final optional variable-assignment stage runs immediately before the response is handed back to the adapter. Useful for setting outbound headers, status codes, or tracking values.

5
Adapter delivers the response

The adapter sends the response back to the caller on the still-open connection. The two-way conversation closes.

i
Not every adapter supports two-way on a receive port. Two-way mode requires an adapter that can hold a connection open and deliver a synchronous response, for example, an HTTP listener. Adapters that are inherently fire-and-forget, schedulers, file pickups, queue dequeues, are one-way only. See Adapters for the per-adapter behaviour.

Exceptions, Tracking, and Subscriptions work the same on every port. Set the port’s Exception Message Type to re-publish failures on their own Message Type, and write a subscription expression evaluated against every message on the bus. Tracking is not set on the port: one of the three levels is chosen on the Application and decides what every one of its ports persists. A two-way receive port additionally carries a Response Subscription Expression, evaluated the same way, that identifies which message on the bus is the response to send back to the caller through the same port. The full treatment, with diagrams and the subscription token list, lives once under Options available on every port and Subscriptions and Message Types on the Ports overview.

That's the receive port

Bind a transport adapter, layer on optional variable, pipeline, and map stages, and you have an entry point into Art2link ESB: one-way fire-and-forget, or two-way with a synchronous response held open for the caller. Next: Send port.