locked
Tracking Incoming HL7 Message from receive port causes a delay RRS feed

  • Question

  • Hi All,

    My requirement is to log the incoming raw HL7 message into DB. For this i enabled used tracking from receive Port.

    But, tracking causes minimum of 10 Seconds delay to poll the tracked message into Tracking DB [Tracking_Parts1 table].

    Is there any way to reduce the delay? Or anyother methodologies to log the raw HL7 message?

    Kindly share your expertise,

    Thanks in advance,

    Dani

    Monday, August 27, 2012 1:35 PM

Answers

  • Hi,

    In a HL7/MLLP solution, I wrote a streaming archive pipeline component to write message to the database.  I used the follow as a basis for my code.

    Steaming sample/blog post

    Also created a new pipeline which contained original MLLP Receive Pipeline components in addition to the custom pipeline component for archiving.  I spend a large amount of time testing/reitierating to handle exceptions where a record errored before it was completely archived into the database. 

    Thanks,

    William

    • Marked as answer by DanielTamil Thursday, August 30, 2012 3:53 PM
    Monday, August 27, 2012 7:36 PM
  • One workaround (in the "BizTalk style") is to create three ports before the MLLP port.

    Receive1(File, Passthrough) -> Send1(File,Passthrough) -> Receive2 (MLLP,...)
                       -> Send2 (SQL, XmlReceive, Map)

    Send1 and Send2 are both subscribers to the original messages.

    Send2 stores messages to the Tracking DB.


    Leonid Ganeline [BizTalk MVP] BizTalkien: Advanced Questions

    • Proposed as answer by Tord G. Nordahl Tuesday, August 28, 2012 6:56 AM
    • Marked as answer by DanielTamil Thursday, August 30, 2012 3:54 PM
    Tuesday, August 28, 2012 5:23 AM
    Moderator
  • Hi Dani,

    I agree with William Cummings that you will likely need to create a pipeline component to handle this. However, I would recommend that within your pipeline component, you call an asychronous web service to retrieve a copy of the stream in order to log the raw message. I don't recommend using the Tracking database for this as there is a significant overhead in using the Tracking DB to store all the messages. 

    Also, I wouldn't use the UPDATETEXT method that is stated in the link as it has been deprecated.

    So, to recap, create a WCF web service that can accept a stream, and call that web service asynchronously in your pipeline component. Store the message using something like LINQ2SQL or however you feel is best, but don't use the UPDATETEXT method. 

    Hope that helps,
    Ankit


    Ankit

    • Proposed as answer by AnkitMathur Tuesday, August 28, 2012 8:38 PM
    • Marked as answer by DanielTamil Thursday, August 30, 2012 3:54 PM
    Tuesday, August 28, 2012 3:29 PM

All replies

  • Looks like you need a run-time monitoring. The BizTalk tracking is not the run-time tracking.

    You could create a pipeline component to track the messages. Seems the pipeline is the early stage where you could catch the message in the BizTalk. If it is not fast enough, try to find out the tracking steps before MLLP port.


    Leonid Ganeline [BizTalk MVP] BizTalkien: Advanced Questions

    Monday, August 27, 2012 4:31 PM
    Moderator
  • Hi,

    In a HL7/MLLP solution, I wrote a streaming archive pipeline component to write message to the database.  I used the follow as a basis for my code.

    Steaming sample/blog post

    Also created a new pipeline which contained original MLLP Receive Pipeline components in addition to the custom pipeline component for archiving.  I spend a large amount of time testing/reitierating to handle exceptions where a record errored before it was completely archived into the database. 

    Thanks,

    William

    • Marked as answer by DanielTamil Thursday, August 30, 2012 3:53 PM
    Monday, August 27, 2012 7:36 PM
  • First of all check size of tracking DB and Message BOx DB, if size if big it may cause the issue. To check this use BizTalk MBV Tool (http://blogs.technet.com/b/jpierauc/archive/2007/12/18/msgboxviewer.aspx)

    ALso you can have a dedicated tracking host and see if improve performace. For this create a new host and used it only for tracking purpose.

    Tuesday, August 28, 2012 4:57 AM
  • One workaround (in the "BizTalk style") is to create three ports before the MLLP port.

    Receive1(File, Passthrough) -> Send1(File,Passthrough) -> Receive2 (MLLP,...)
                       -> Send2 (SQL, XmlReceive, Map)

    Send1 and Send2 are both subscribers to the original messages.

    Send2 stores messages to the Tracking DB.


    Leonid Ganeline [BizTalk MVP] BizTalkien: Advanced Questions

    • Proposed as answer by Tord G. Nordahl Tuesday, August 28, 2012 6:56 AM
    • Marked as answer by DanielTamil Thursday, August 30, 2012 3:54 PM
    Tuesday, August 28, 2012 5:23 AM
    Moderator
  • Hi Dani,

    I agree with William Cummings that you will likely need to create a pipeline component to handle this. However, I would recommend that within your pipeline component, you call an asychronous web service to retrieve a copy of the stream in order to log the raw message. I don't recommend using the Tracking database for this as there is a significant overhead in using the Tracking DB to store all the messages. 

    Also, I wouldn't use the UPDATETEXT method that is stated in the link as it has been deprecated.

    So, to recap, create a WCF web service that can accept a stream, and call that web service asynchronously in your pipeline component. Store the message using something like LINQ2SQL or however you feel is best, but don't use the UPDATETEXT method. 

    Hope that helps,
    Ankit


    Ankit

    • Proposed as answer by AnkitMathur Tuesday, August 28, 2012 8:38 PM
    • Marked as answer by DanielTamil Thursday, August 30, 2012 3:54 PM
    Tuesday, August 28, 2012 3:29 PM