zombie messages in Sequential Convoy RRS feed

  • General discussion

  • Hello All,

    I have a sequential convoy orchestration which inserts the message in a SQL table and If that message is already present then it terminates the flow. now this is working fine if I process 1 message at a time but when I drop 4-5 or multiple messages my orchestration is getting suspended with the error " The instance completed without consuming all of its messages. The instances and its unconsumed messages have been suspended."

    Now all the 4-5 messages were picked up by BizTalk but even as only 1 of them was a duplicate but the others also didn't process.

    Monday, May 8, 2017 3:29 PM

All replies

  • Hello,

    You are getting zombie message when you orchestration still in memory and already in termination state.

    Try in you listen shape place Delay shape first on left and receive on right. Also try not to terminate, but instead correlate by current date as correlation ID. That will limit possibilities of Zombie

    Monday, May 8, 2017 3:38 PM
  • Hello

    I already have a Listen shape with a Receive and a Delay shape as seen in the screenshot. Now in the call orchestration I am calling a separate orchestration which has all the code to check for duplicates and other Business logics.

    Monday, May 8, 2017 3:44 PM
  • Hi Abhinav,

    After you receive a message original message or in Listen shape your CallOrchestration is taking too long for processing. Try to simplify the process and process incoming messages in separate process.

    Thank you

    Monday, May 8, 2017 4:44 PM
  • You can implement two possible solutions that will almost fix your problem from example below:

    I already mentioned them in my first reply to your post.

    Thank you

    Monday, May 8, 2017 4:49 PM
  • The option to put back messages to the msgbox after loop time out is quite nice
    Handling orphans is not time consuming but in the long run it all adds up

    rgds /Peter

    Tuesday, May 9, 2017 7:32 AM
  • As you can see from the screenshot I am already processing the incoming messages in a separate orchestration that I am calling from the main one. My issue is that if I have a duplicate message then the orchestration terminates which causes any subsequent messages to become Zombie. So, I want to know that is there a way to terminate a process without creating zombies
    Tuesday, May 9, 2017 8:57 AM
  • Send the duplicate message for manual handling on a separate port eg attached to an email
    I assume it is possible for to know it's a duplicate?
    Tuesday, May 9, 2017 9:38 AM
  • Yes that we can know but even if we send the message via a send port the remaining flow of the orchestration would still continue which we don't want.
    Tuesday, May 9, 2017 11:09 AM
  • Add an decide shape to get past it
    You can even set a variable to exit the loop if you want

    Business requirements will decide the implementation to use 


    Tuesday, May 9, 2017 1:53 PM
  • I used a throw exception and catch exception to handle this and it is working smoothly.
    Tuesday, May 9, 2017 2:07 PM
  • Yes that we can know but even if we send the message via a send port the remaining flow of the orchestration would still continue which we don't want.

    You need to read article by BT expert Leonid Galelin. He explained the problem with orchestration suspend/terminate. TO solve the solution you need to redesign it and separate processing flows.

    Tuesday, May 9, 2017 5:37 PM