Full support for async messaging and correlation ------------------------------------------------
Key: CAMEL-1336 URL: https://issues.apache.org/activemq/browse/CAMEL-1336 Project: Apache Camel Issue Type: Improvement Components: camel-core Affects Versions: 1.5.0 Reporter: Hadrian Zbarcea Priority: Critical 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: {code} from("direct.start") .setHeader("reply-to", constant("hadr...@localhost; c...@localhost")) .correlate(header("Message-ID")) .to("smtp://some...@localhost?password=secret&to=other...@localhost") from("pop3://hadr...@localhost?password=secret).correlate(header("Message-ID")) .from("some-other-source") .aggregate(header("foo")).to("direct:end"); {code} *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. Any ideas? -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.