In an Enterprise Service Bus you have several services which are loosely connected via several transport mechanisms. The Healthcare uses the standard HL7 for communication between systems, hardware and software. Most of the time MLLP (Minimal Lower Layer Protocol) is used for transport. Because in an ESB architecture systems are loosely coupled, some challenges can arise when messages must be processed sequentially.
For example: consider the next 3 ADT messages: with A01 (patient admit), A02 (patient transfer) and A03 (patient discharge). This is also the sequence/order the messages must be delivered to other systems. You can’t discharge (A03) a patient if the patient is not admitted (A01).
In an Spoke and Hub or Enterprise Application Integration architecture you can connect the systems with each other and make the process sequential. BizTalk Server works asynchronous, so messages are dropped in the MessageBox and processed by a subscriber, which can be an Orchestration or Send port. Example: if the Send port process the second message (A03) faster as the first message (A01) which is used in an Orchestration, then the backend system will return an error (BizTalk processing is also known as: first-in, fastest out). To make this process synchronously BizTalk Server and the MLLP adapter offers some techniques which can be used:
- Ordered Delivery on the receive port.
- Listen-shape in an Orchestration together with a correlation set based on the Patient ID.
- Make use of guaranteed delivery.
- Wait for ACK/NACK response from the backend, before continuing to the next message.
But how to solve this in an ESB architecture? How to solve this with BizTalk Server ESB Toolkit 2.0?
My answer to this question in the title is: yes it can. How? The ESB Toolkit makes use of BizTalk Server, and is therefore based on rules prescribed by BizTalk. The Itinerary will become just a context property on a message for routing thru the BizTalk system. So you can still make the process synchronously. The Orchestration must use a “request” / “response” mechanism to send the message to the backend system, and wait for an ACK before processing the next message. Some blogs from my this month can help to make this happen, also for a generic solution.
Let me know how you think about this or if you have already experience with HL7, MLLP and the ESB Toolkit.




