Time limit on a process.

I am looking at a process for which there is a time limit.
We receive a xml and the customer expects to receive our reply within sixty seconds. If this does not happen the customers considers the transaction to have failed.
We also want to stop the processing should it take too long as the customer ignores any reply they receive after sixty seconds.
Have considered checking against the timestamp of the incoming message, but requires checking several times during the entire processing.
Would it be possible somehow to run a service checking the time taken parallel to the actual processing and let this trigger when processing should stop?
The entire inbound process which is the time consuming one consists of three mesages with transformations between them - original xml, canonical xml and system xml.

Does the cutomer need just an acknowledgement that you recieved the XML document or the customer needs a confirmation that you processed the XML? Based on that your implementation will vary. Send me your reply and probably I can suggest something.

If you are looking to timeout your process within 60 sec, then you can use the ProcessTimeout property (Runtime Properties of the Process model. ref. pg 67 of ModelerUsersGuide.pdf). Use Relative Time (specified in ms) for the process timeout.

In case you need to check the timeout during only one step which handles the ACK sending then apply the timeout properties to the step only and make a transition(timeout) to the ‘timeout step’.

Create a timeoutStep to handle all the logic that needs to be taken care (may be sending some ack/messages, stopping the process…).

This step would be invoked when your process does not complete in 60 sec.

HTH
PRY

With 3 transformations needed for the incoming XML, it will be tight timeline to finish this within the 60 second. So consider sending the response with set response right away after you receive the xml successfully. In next steps you can do all those tranformations.

Other way is to receive the xml via a gateway service and then call your transformation service on a separate thread vi service.doThreadInvoke and pass the received xmldata. This way your gateway service finishes instantly.

HTH,
Bhawesh.

Thank you all for your replies. Below some more information on the situation.

We do not use the Modeler so we can not use any time constraints from the Modeler.

We can only send the reply to the customers once we finished processing all transformations and done some interactions with our backend system as the reply will include data from here.

Normally the process is fast enough to be completed within 10-15 seconds, but at times when our backend is really busy combined with receiving many request from the customers we experience that a number of the transactions takes longer.

Problem is that often when the customers sees a time out they will retry so in addition to the processing of the original request we now receive a second request also to be processed. As you can imagine these situations can escalate quite a bit.

We just want a way to stop our processing when ever we know the customers are not waiting for our reply anymore.

The customers can also not control it very well from their end as quite a few of them receives their requests from their websites to be passed on to us.

By reading ‘process’ it’s mistaken for process model.

Is there really any way to stop a flow service based on the time it takes ?

I would be very eager to know it too.

PKY