Uploaded image for project: 'Camel'
  1. Camel
  2. CAMEL-3189

Completed aggregated exchanges are never confirmed in the AggregationRepository

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 2.3.0
    • 2.5.0
    • None
    • None

    Description

      Under certain circumstances, the completed exchanges from an aggregator would remain in the AggregationRepository and redeliver after a restart of Camel. These exchanges had already successfully completed their route, so this redelivery is in error.

      My guess is that in the AggregationProcessor on line 374, the AggregateOnCompletion gets added to a UnitOfWork that doesn't ever get done() called on it... or something.

      I seemed to be able to prevent the problem by changing my AggregationStrategy. The old version looked like this:

      public Exchange aggregate (Exchange oldExchange, Exchange newExchange) {
        String body = "";
        if (oldExchange != null) {
          body = oldExchange.getIn().getBody(String.class);
        }
        body += newExchange.getIn().getBody(String.class);
       newExchange.getIn().setBody(body);
       return newExchange;
      }
      

      You can see that the exchanges are aggregated into the newExchange. I changed it to aggregate into the oldExchange:

      public Exchange aggregate (Exchange oldExchange, Exchange newExchange) {
        String body = "";
        if (oldExchange != null) {
          body = oldExchange.getIn().getBody(String.class);
        } else {
          oldExchange = newExchange;
        }
      
        body += newExchange.getIn().getBody(String.class);
        oldExchange.getIn().setBody(body);
       return oldExchange;
      }
      

      Attachments

        Activity

          People

            davsclaus Claus Ibsen
            gim Glenn Moss
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: