Is it possible to 'queue' task inputs without using JMS etc?

Hi to everyone! First post and looking for some info on what I think should be possible with flowable. I’ve spent about two days trying to figure this out and not having much luck so I’m hoping some knowledgable people in here can help out.

TLDR; Is there a way to ‘queue’ inputs to a process and then automatically process them after a certain, later, state in the process has been reached?

I’m effectively looking at an orchestration problem (long running transaction) between components in a distributed system where the transaction is required to move through a series of states until finally completed. The problem is not unlike the many order/dispath/fullfil or vacation/request examples that are commonly used to illustrate this kind of requirement.

Using the order/dispath/fullfil scenario as an example, one of my components could send a create order request, immediately followed by a dispatch request. However the business requirement is that this dispatch request can only be processed after the transaction has gone through a couple of other states, lets say a confirmation of stock being available first, followed by a confirmation of payment being taken. Only when responses for those requirements have been met should the dispatch request be processed and either confirmed / denied if the stock is not available, or if payment fails. Obviously if payment fails then stock available should be compensated and be put back into inventory.

The compensating actions are fine but what I am looking to do is to accept the incoming dispatch request and effectively queue it as part of the process until the stock and payments systems have responded and only then process the dispatched request. I need to do it this as there is no way to compensate for the dispatch request therefore the response has to be correct.

Hopefully the above makes sense and there is an easy wat to deal with this.

Thanks in advance!

Not really, at least not directly in BPMN. What is typically used for these kind of use cases is some sort of message queue in between the components. Instead of delaying the processing of the message, the message is stored (or a reference is stored) in the process/case instance to be used in a later state. I.e. storing already the fact that the message has been received and then take that into account in later steps that the message could a) need to be received or b) is already there.

1 Like