ESB process with Fanout step

Posted by cmspsdn on 23-Jun-2011 22:06

I have a process which contains a fanout of just 2 branches.

The left branch performs an XML transformation, followed by a wsdl response invocation and then exits the fanout.

The right branch performs a file drop followed by a terminate step.

What I have discovered is that the right branch completes before the left and sends its message to the exit endpoint "Reply_To". Causing the WSDL response to receive an invalid SOAP message and the message from the repsonse invocation step ends up in the dead message queue with a JMS_SonicMQ_underliveredReasonCode = 5.

I have discovered that if I use a "Reject" step or an "Endpoint" step pointing to dev.Exit, the process works fine.

Using the Reject step isn't correct, even though it works. And using the Endpoint step just doesn't fell correct.

Can someone please offer some alternatives.

My goal is to have the left branch send a wsdl respones and finish the process flow and the right branch to continue executing it's content and terminate when finished.

Thank you, Tony.

All Replies

Posted by mnair on 23-Jun-2011 22:40

Hi Tony,

Are you testing this in workbench?

While running in workbench (test containers) the Terminate step returns a dummy response that states that the process has terminated successfully. This is primarily to cater to testing in workbench scenarios where this dummy response produces a meaningful response to the user.

You could move the service that preceeds the terminate step to a different non-Test container then the terminate step should not produce any output and should terminate that branch as you would expect.

Let me know if you have further questions.

Thanks

-Mahesh

Posted by cmspsdn on 23-Jun-2011 23:14

Thanks Mahesh. Yes I am working in the Workbench with containers that are in test mode.

So using the Terminate step is the correct method of terminating the process flow in a branch?

Is there an issue with using an Endpoint step that points to dev.Exit?

Thanks,

Tony.

Posted by mnair on 23-Jun-2011 23:36

Yes, the Terminate step is the right mechanism to terminate the processing of a branch.

Now assuming that the Terminate step is sufficient for your use case, using the endpoint step will unnecessarily result in additional messages getting sent to the JMS destination corresponding to the dev.Exit endpoint. In addition to the additional overhead, depending on the destination type and other configuratoin for the endpoint, you might want to flush out these additional messages to avoid ending up in flow control scenarios that could temporarily block the normal execution of your process.So if you want to just terminate the branch then just use the Termiante step.

Thanks

-Mahesh

Posted by cmspsdn on 23-Jun-2011 23:51

Thank you.

This thread is closed