This is a feature that has been requested by users a few times, and it's time to get addressed.
Camel does not really support 2x 1-way async messaging. It sorta does in camel-jms, by sending a message to a queue and setting the "JMSCorrelationID" header. For a ExchangePattern.InOut it immediately waits for a response (up to a timeout period) and gets the reply and continues processing.
There are a few issues with this approach:
- this mechanism is not available across all camel components. There are other camel components that support async 1 way messaging such as file/ftp, mail, mina, cxf, etc.
- there can be no other processing between a message is sent and a reply is received.
- the timeout value is short and keeps resources locked, we cannot have long running transactions
My proposal is to:
- move the mechanism from jms into core (and improve it)
- use a correlation mechanism (that will be different for different components, such as MessageID in camel-mail) to correlate inputs with outputs. The correlation mechanism could be implicit or explicit.
- provide a storage for pending 2x 1-way async UOWs (multiple options available)
A route would then look something like this:
note: the multiple from(s).
- This also gives unlimited time for a reply to be received.
- I don't think support for acid transactions makes any sense in such case.
- The presence of correlate() in the pipeline causes automatic storage of the uow
- The presence of correlate() after a from() causes the removal of the uow from persistent store.