General BPL Behaviour

Hello All!

I have a query regarding general behaviour of a business process in Ensemble. 

I have a BPL which has a call block out to an operation (Adapter class EnsLib.SOAP.OutboundAdapter).  The call to this operation is synchronous (i.e. the Asynchronous box is not ticked), with a long time out value. and the pool size of the process is set to 1 in the management portal.

 

What I am seeing is that when messages are being processed, a second message is being processed by the BPL before the first message that entered the BPL has had a response back from the call to the operation.  I was not expecting this behaviour and am wandering how I can ensure that the BPL does not start processing the next message until the first message has received a response back from the call block? (and then processed that response accordingly).

 

EXAMPLE:

Message 1:        

 

Message 2:

 

Message 2 is being processed in the BPL and makes a call out [2] before message 1 has been fully processed by the BPL?

  • 0
  • 0
  • 233
  • 6
  • 3

Answers

I believe you need to set your pool size on the process.

Hi Julian,

As described in my post the pool size is set to 1.  This should mean there is only one job running this process and I thought would mean that it wouldn't start processing the second message?

Sorry John, I hadn't had my coffee when I read your post.

When you look at the first message heading info within the Trace, does the Time Processed come before or after the Time Created of Message 2?

Thanks Julian,

I have posed the traces of both messages below.  The process makes several calls to the operation.  As you ca see by the timings in the trace window, Message 2 is in the process making calls during the time that Message 1 is still in the process?  Could the BPL be starting to process Message 2 inbetween processing Message 1? (whilst waiting for Call Responses for Message 1?)

Message 1:

Message 2:

Hi John

In this case the problem is not in BP but in your BS asynchronous.

Try a test by swapping your BS call to sync.

After this change the messages will start to queue within your BP

Sorry for any mismatch, as this message has been translated by Google Translate

Obrigado Giba.

Hi Gilberto,

All of my Business Service CALLS are already set to synchronous (see below), this is why I find this issue confusing?

Thanks

John

Your screen print shows the serRadiology service call to the proPCMAttributeRadiology process as asynchronous.

For this reason you do not have Message Queuing

Sorry for any mismatch, as this message has been translated by Google Translate

Thank you

Giba.

Thank you Giba!

Yes I have now gone back and changed the call from the Business Service to act synchronously and this has rectified the issue!  The simplest way to do this was to set the Ack Mode to 'application' so that a new message was not received on the Service until the process had sent back an application Ack for the previous message (which it does at the end of the process).

Many thanks for all of your help solving this!

Comments

Achieving  FIFO with Ensemble is an interesting task.

Do you control queue population?

If so  you can send the message only if the queue is empty and process is idle.

For example create a proxy process that sends only one message at a time.