I don't know, seems that branch does not result in rollback, but maybe it
does eventually and then the cause is missing.

A variant of the MessageListenerRedeliveryTest should prove it.

https://github.com/apache/activemq/blob/d6682e5476cd8cbefca04227ffa26a5d508d2494/activemq-unit-tests/src/test/java/org/apache/activemq/MessageListenerRedeliveryTest.java#L333

On Thu, 12 Nov 2015 at 11:23 Martin Lichtin <lich...@yahoo.com> wrote:

> Trying to understand why dlqDeliveryFailureCause has a 'null' value, it
> seems that in ActiveMQMessageConsumer.dispatch() the code
>
>                             } catch (RuntimeException e) {
>                                 LOG.error(getConsumerId() + " Exception
> while processing message: " + md.getMessage().getMessageId(), e);
>                                 if (isAutoAcknowledgeBatch() ||
> isAutoAcknowledgeEach() || session.isIndividualAcknowledge()) {
>                                     // schedual redelivery and possible
> dlq processing
>                                     md.setRollbackCause(e);
>                                     rollback();
>                                 } else {
>                                     // Transacted or Client ack: Deliver
> the
>                                     // next message.
>                                     afterMessageIsConsumed(md, false);
>                                 }
>                             }
>
> should also set md.setRollbackCause(e) in the else clause?
>
> - Martin
>
> ------------------------------
> *From:* Martin Lichtin <lich...@yahoo.com>
> *To:* Gary Tully <gary.tu...@gmail.com>; ActiveMQ Users <
> users@activemq.apache.org>
> *Sent:* Wednesday, November 4, 2015 12:32 PM
>
>
> *Subject:* Re: What happens with JMSRedelivered when server moves message
> to DLQ
>
>
> I'm not actually talking about the counter, but the Boolean flag
> 'JMSRedelivered'.
> Anyways, you're right that it should work when setting
> persistJMSRedelivered=true (I forgot about this option).
>
> Regarding the "poison cause", is it not possible for the client side to
> return a non-null cause?
> For example, when a message ends up in DLQ, it has additional property:
>
> dlqDeliveryFailureCause=java.lang.Throwable: Exceeded redelivery policy
> limit:RedeliveryPolicy {destination = null, collisionAvoidanceFactor =
> 0.15, maximumRedeliveries = 0, maximumRedeliveryDelay = -1,
> initialRedeliveryDelay = 1000, useCollisionAvoidance = false,
> useExponentialBackOff = false, backOffMultiplier = 5.0, redeliveryDelay =
> 1000}, cause:null,
>
>
> This is nice, but pretty useless information.
> A real value would be if "cause:null" would instead be shwoing the
> Exception that the application threw.
>
> - Martin
>
> >________________________________
> > From: Gary Tully <gary.tu...@gmail.com>
> > To: Martin Lichtin <lich...@yahoo.com>; ActiveMQ Users <
> users@activemq.apache.org>
> > Sent: Wednesday, November 4, 2015 11:52 AM
> > Subject: Re: What happens with JMSRedelivered when server moves message
> to DLQ
> >
> >
> > that is intended. the dlq enqueue is a new message. the poison cause
> property will have some good information but it would make sense to add a
> property that captures the value of that counter. the only issue is that
> the value is typically interpreted client side and remains 1 on the broker
> so it may be of limited value. if you want to depend on the redelivery
> counter you may want to peek at the persistjmsredelivery option.
> >
> >
> > On Tue 3 Nov 2015 3:45 PM Martin Lichtin <lich...@yahoo.com.invalid>
> wrote:
> >
> > I see the JMSRedelivered flag goes back to 'false' when # of
> redeliveries is exceeded
> > and ActiveMQ server moving the message into the DLQ.
> >
> > Is this done on purpose? I'd rather expect the flag stay 'true', as this
> state should be preserved.
> >
> > - Martin
>
>
>

Reply via email to