Shorten the BizTalk HL7 MLLP adapter timeout of 3 seconds (MLLPFlushTimeOut)
Last week I had a problem at a client with the MLLP adapter. All messages sent through an ordered delivery MLLP Send Port were showing delays of about 3 seconds. We kept looking at the wrong places. Since the throughput of the server quadrupled after a merger, we were to focussed on performance problems, but it turned out to be a registry setting.
Determined since the messages were sent to systems almost exactly 3 seconds after receiving the ACK, I thought it couldn’t be a performance problem. Also the server wasn’t showing any issues and also hadn’t been thottling at all. After a long search, we found a post on MSDN (link) explaining the problem. Since it took me a while to figure this out, I have decided to post this on my own blog and hope it can help fellow BizTalkerts encountering this problem.
Solution
The solution to this problem is adding the registry entry MLLPFlushTimeOut in the registry, set it to a small enough value and restart the host instance:
- Open the registry editor (regedit)
- Browse to the following keys if they exist. Otherwise, perform a search for “BizTalk Accelerator for HL7“:
- BizTalk 2013 (32-bit): HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\BizTalk Accelerator for HL7\Version 2013
- BizTalk 2013 (64-bit): HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\BizTalk Accelerator for HL7\Version 2013
- For other BizTalk versions, the Version will be named accordingly (Version 2010, Version 2009).
- Now add a node named MLLPSendFlushTimeOut and enter a value in ms, e.g. 50 (this can be a String or DWORD value). Don’t go too low (e.g. lower than 50 ms), since your system should also be capable of handling the load itself.
- Make sure to grant the BizTalk Server Application users access to the registry node BizTalk Accelerator for HL7 and its children.
- Restart the host instances affected.
And as to why Microsoft choose 3 seconds, I don’t have a clue. I can imagine a some time to allow receiving systems to process messages and not overflood those systems with messages, but 3 seconds?! A little much nowadays. And in my opinion an option like this should be adjustable in an easy manner. There’s no mention of this in the documentation I’ve found online and it just ought to be in there!
It just makes me feel like this 😐
Thank you, saved my life