On Tue, Jun 14, 2011 at 6:13 PM, Claus Ibsen <claus.ib...@gmail.com> wrote:

> On Tue, Jun 14, 2011 at 5:08 PM, Morten Holm <m...@tradeshift.com> wrote:
> > Hi
> >
> > Redelivery is not disabled when maximumRedeliveries is set to 0. I
> experience that one redelivery is always attempted.
> >
> > The errorhandler  looks like this.
> >
> >        <errorHandler xmlns="http://camel.apache.org/schema/spring";
> id="failedMessagesErrorHandler"
> >                type="DeadLetterChannel" deadLetterUri="jms:deadLetters"
> useOriginalMessage="true">
> >                <redeliveryPolicy maximumRedeliveries="0"/>
> >        </errorHandler>
> >
> >
>
> You can enable logging for redelivery (retry) and set a high logging
> level like WARN etc. so you can notice it in the logs.
>
> <xs:attribute name="retryAttemptedLogLevel" type="tns:loggingLevel"/>
> <xs:attribute name="logRetryAttempted" type="xs:string"/>
>
> But using 0 ought not to attempt redeliveries, unless you have
> <onException> or something else that has a policy which overrides the
> <errorHandler>.
>
>
> > It seems like the last line could be the problem:
> >
> > From RedeliveryPolicy.java:
> >   /**
> >    * Returns true if the policy decides that the message exchange should
> be
> >    * redelivered.
> >    *
> >    * @param exchange  the current exchange
> >    * @param redeliveryCounter  the current retry counter
> >    * @param retryWhile  an optional predicate to determine if we should
> redeliver or not
> >    * @return true to redeliver, false to stop
> >    */
> >   public boolean shouldRedeliver(Exchange exchange, int
> redeliveryCounter, Predicate retryWhile) {
> >       // predicate is always used if provided
> >       if (retryWhile != null) {
> >           return retryWhile.matches(exchange);
> >       }
> >
> >       if (getMaximumRedeliveries() < 0) {
> >           // retry forever if negative value
> >           return true;
> >       }
> >       // redeliver until we hit the max
> >       return redeliveryCounter <= getMaximumRedeliveries();
> >   }
>
Thanks for the fast reply. I have no <onException> so that cannot be the
reason.
I have run through the code with a debugger and the message is tried resend
once. It seems like the following line always will return true

  return redeliveryCounter <= getMaximumRedeliveries();

So couldn't that be the problem ? in my case both variables would be 0 and
the method would return true.



>
> > Am I doing something wrong ? Are there some properties that I have to set
> ?
> >
> > -- camel version: 2.7.1
> >
> > --
> > Morten Holm
> > Developer
> >
> > Voice: +45 31 18 91 08
> > Skype: morten.holm
> >
> > http://tradeshift.com - INVOICING HAS NEVER BEEN EASIER
> >
> >
>
>
>
> --
> Claus Ibsen
> -----------------
> FuseSource
> Email: cib...@fusesource.com
> Web: http://fusesource.com
> Twitter: davsclaus, fusenews
> Blog: http://davsclaus.blogspot.com/
> Author of Camel in Action: http://www.manning.com/ibsen/
>



-- 
Morten Holm
Developer

Voice: +45 31 18 91 08
Skype: morten.holm

http://tradeshift.com - INVOICING HAS NEVER BEEN EASIER

Reply via email to