Skip to content
Art2link ESB v2.02 LTS HomeDocumentationBlogContact
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 MESSAGE TYPE ✓ Publish

A receive port is the entry point for messages into Art2link ESB. It binds an adapter to a sequence of optional transformations and publishes the result to the bus. 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.

Every message published to the bus must carry a Message Type. On the inbound side of a receive port the Message Type is resolved in two places, a pipeline component can classify the message at runtime, and if no classification happens the port’s optional Publish Message Type Fallback takes effect. If neither resolves a Message Type, the port raises an error. Pipeline classification to a Message Type that does not exist in the application also errors.

Once the Message Type is known, the inbound map step runs, or doesn’t. There are three map configurations: None (no transformation), Typed (a table of maps keyed on source Message Type; the row whose source matches the resolved Message Type 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 = resolved 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 OPTIONALPublish MTFallbackUsed if no MT assignedSee Message types → applies to External system that initiates the request Caller REQUIREDAdapterWire-level protocolSee Adapters →{ x }OPTIONALVariablesON ENTRYCapture contextSee Variables →OPTIONALPipelineINBOUNDPre-processSee Pipelines →OPTIONALMapINBOUNDNone / Typed / UniversalSee Maps →{ x }OPTIONALVariablesON EXITCapture 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
Variables, On Entry (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.

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 has three modes, None (skipped), Typed (a table of maps keyed on source Message Type; the row that matches the resolved Message Type 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 Publish Message Type Fallback and map configuration section above. Maps are configuration-only and take effect on save.

5
Variables, On Exit (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, 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. The response message comes off the bus already typed, so there is no Publish Message Type Fallback on this side: the resolved Message Type is whatever the bus message carries when the Response Subscription Expression picks it up.

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 OPTIONALPublish MTFallbackUsed if no MT assignedSee Message types → REQUIREDResponse Sub ExprPORT-LEVELPicks the response applies to Mappicks 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 }OPTIONALVariablesON ENTRYCapture contextSee Variables →OPTIONALPipelineINBOUNDPre-processSee Pipelines →OPTIONALMapINBOUNDNone / Typed / UniversalSee Maps →{ x }OPTIONALVariablesON EXITPre-publishSee Variables → REQUIREDAdapterRESPONSEDeliver responseSee Adapters →{ x }OPTIONALVariablesON EXITPre-deliverySee Variables →OPTIONALPipelineOUTBOUNDPost-processSee Pipelines →OPTIONALMapOUTBOUNDNone / Typed / UniversalSee Maps →{ x }OPTIONALVariablesON ENTRYFrom busSee Variables → Internal message bus - request published here; response picked up via the Response Subscription Expression Bus REFERENCE
1
Variables, On Entry (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). The response comes off the bus already typed, so there is no Publish Message Type Fallback on this side.

3
Outbound pipeline (optional)

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

4
Variables, On Exit (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.

Result. The response is delivered to the adapter, which sends it 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.

Two options are independent of port type and direction, they apply equally to receive, send, loopback, and null ports.

Exceptions. When enabled, the port has a configured exception Message Type. An error during processing swaps the in-flight message's Message Type to that exception Message Type and re-publishes it. The payload itself is untouched.

BEFORE Message Type: Order Body: in-flight ⚡ exception raised swap MT payload unchanged AFTER Message Type: OrderException Body: → published to bus

Subscribe to the exception Message Type from another port to handle failures centrally, typically a send port that emails an alert, writes to a log, or files a ticket. Error traffic flows on its own Message Type rather than mixed with the original. On the Tracking screen, runs handled by a configured exception path appear as Exceptions; runs that failed without one appear as Errors.

Tracking. Per-port setting with three levels controlling what (if anything) is persisted to the Tracking store on each run.

Only on Error ON SUCCESS — nothing recorded — ON FAILURE step history + body ⚡ FAILURE ONLY Enabled ON SUCCESS full step history no body ON FAILURE full step history no body Enabled + Body ON SUCCESS step history + body body at every step ON FAILURE step history + body body at every step

Set the same level across every port of a flow for a coherent end-to-end view on the Tracking screen. The system also maintains its own minimal internal tracking for running and suspended transactions (used for the runtime dashboard), that's separate from this configurable Tracking and is always on. Every tracked step writes to the tracking database, mind the cost tradeoff with retention and reindexing jobs.

Send, loopback, and null ports each carry a subscription expression, a Boolean filter evaluated against every message published to the bus. Two-way receive ports carry the Response Subscription Expression for the same evaluation, used to identify which message on the bus is the response to send back to the caller through the same port.

Bus PUBLISHED MESSAGE MT: Order evaluated against every subscriber port ✓ match ✗ skip ✓ match Send port A {{Message.MessageType}} == "Order" → gets copy Send port B {{Message.MessageType}} == "Invoice" (no copy) Loopback port {{Promoted.Order.region}} == "EU" → gets copy

Pub/sub. When a message hits the bus, every subscription is evaluated independently. Each matching port gets its own copy and runs the message through its own flow. The same message can be picked up by any number of ports.

Message Type is the string identifier every bus message carries (similar in concept to BizTalk’s). A subscription expression most often checks the Message Type, but it can reference any of the following:

Token / sourceResolves to
{{Message.MessageType}}The current message’s Message Type identifier
{{Promoted.MessageType.Name}}A promoted property defined on the Message Type (see Message types)
{{Variable.Name}}The current value of an application Variable
{{Config.PortName}}The Name of the port the current message originated from
{{Message.Body}}.XPath()A value read from the message body, XPath (XML) or JPath (JSON)
Custom functionsRuntime-evaluated logic

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.