Pass-through and store-and-forward, and which ACK the sender gets in each case.
Runs onWindows · Linux · macOS · DockerFree developer license for test traffic. Production traffic needs a paid license.
Choose per route
passthrough
store_and_forward
When the sender gets its ACK
After the destination answers
As soon as the message is durably stored
Which ACK
The destination's own HL7 ACK if it returns one, otherwise one mapped from its answer
AA, then the gateway delivers in strict order
If the destination is down
The sender gets AE (or AR, or no ACK) and resends
Messages queue up and are retried with backoff
Good for
Interfaces where the sender must see the destination's verdict
Keeping MEDITECH's queue moving through outages
What happens in each situation
Situation
passthrough
store_and_forward
HTTP 2xx (no ACK body, or AA), or an MLLP AA
AA
Delivered, next message
An HL7 ACK (in the HTTP or SOAP body, or over MLLP)
Relayed as-is
AR: rejected. AE: retried.
HTTP 4xx, or a SOAP Client fault
AR
on_reject = "block" retries it and later messages wait; "dead_letter" parks it and moves on
HTTP 408, 429 or 5xx, or a SOAP Server fault
AE
Retried with backoff; after max_attempts, dead-lettered
Unreachable, timeout, or no MLLP ACK within request_timeout
on_error: AE, AR or no ACK
Retried with backoff
Queue store unavailable
n/a
AE, so the sender resends
No valid license, or developer license and MSH-11 = P
AR, with an explanation
AR, with an explanation
Settings
Setting
Values
[route.passthrough] ack_from
response_body (relay the destination's HL7 ACK, else map the status) or http_status (2xx → AA, 4xx → AR, 408/429/5xx → AE)
[route.passthrough] on_error
AE, AR, or no_ack (close the connection so the sender resends)
[route.store_and_forward] on_reject
block for strict ordering (ADT) or dead_letter to carry on (ORU)
[route.store_and_forward] max_attempts
Dead-letter after this many failed attempts. Unset: retry forever.
[route.store_and_forward] retry
{ initial = "1s", max = "5m", multiplier = 2.0 }
To unblock a blocked route, fix the destination and select Retry now in the console, or move the head message to dead letters. A requeued dead letter goes to the end of the queue.