Camel
  1. Camel
  2. CAMEL-1336

Full support for async messaging and correlation

    Details

    • Type: Improvement Improvement
    • Status: Open
    • Priority: Major Major
    • Resolution: Unresolved
    • Affects Version/s: 1.5.0
    • Fix Version/s: Future
    • Component/s: camel-core
    • Labels:
      None

      Description

      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:

      from("direct.start")
          .setHeader("reply-to", constant("hadrian@localhost; copy@localhost"))
          .correlate(header("Message-ID"))
          .to("smtp://someone@localhost?password=secret&to=otherone@localhost")
      from("pop3://hadrian@localhost?password=secret).correlate(header("Message-ID"))
          .from("some-other-source")
          .aggregate(header("foo")).to("direct:end");
      

      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?

        Activity

        Hide
        Claus Ibsen added a comment -

        See CAMEL-2151 which has the base stuff in the camel-core for components which supports async request/reply can leverage.

        Show
        Claus Ibsen added a comment - See CAMEL-2151 which has the base stuff in the camel-core for components which supports async request/reply can leverage.

          People

          • Assignee:
            Hadrian Zbarcea
            Reporter:
            Hadrian Zbarcea
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:

              Development