I have a workflow which I would like to implement in Spring Integration which is roughly this:

1) Message enters input channel
2) Service A gets the message
3) Service A calls external asynchronous service to process message
4) Service A needs to enter a "wait state" until message returns from external service
5) Service A then needs to pass message to Service B. Service B depends on results from Service A so cannot execute out-of-order.
6) Service B calls external asynchronous service to process message
7) Wash, rinse, repeat
8) Service Z needs to pass resultants message(s) to output channel

How would I implement this in Spring Integration?

My experience on other projects has been with jBPM and with that BPM engine, I could specify that nodes enter a "wait state" or "task list" depending on situation until an asynchronous job called back. Are there similar concepts in Spring Integration or do I need to implement a workflow engine into the architecture?

If I do need to implement a workflow engine, which is recommended with Spring Integration which would provide this exact functionality?

Thanks!