You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@activemq.apache.org by windeyu <wi...@hotmail.com> on 2014/12/02 23:33:10 UTC

What is duplicate delivery poison ack?

Hello,

Over several thousands of messages consumed, occasionally I got the
following WARN in the log.

/[ActiveMQMessageConsumer:1434] (   ) acking duplicate delivery as poison,
redelivery must be pending to another consumer on this connection,
failoverRedeliveryWaitPeriod=0. /

(1) What is duplicate delivery poison ack?  I browsed through related posts. 
Please correct me if I'm wrong.  I think it means the two (maybe more)
consumers send ack to the same message back to the broker.  The last
received ack is considered as a duplicate and as a poison ack.  This can
happen as a result of failover from the first consumer to the second
consumer before the first consumer sends the ack.

(2) This log entry is marked as a WARN not an ERROR.  Is it because the
second consumer processed the message successfully anyway, regardless the
first consumer got a rollback?

(3) Does AMQ-5279 address this issue?  I noticed that the message that got
poison ack was put into DLQ in my case, matching to the description in that
issue.

My environment:
I have multiple consumers on multiple machines connecting to an activemq
broker with failover protocol, jms.prefetchPolicy.all=0,
Session.SESSION_TRANSACTED, default slow consumer strategy, and group ID on
every message.  The ActiveMQ version is 5.10.0.  

Thanks in advance.



--
View this message in context: http://activemq.2283324.n4.nabble.com/What-is-duplicate-delivery-poison-ack-tp4688299.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.

Re: What is duplicate delivery poison ack?

Posted by Gary Tully <ga...@gmail.com>.
I think https://issues.apache.org/jira/browse/AMQ-5854 is what you need.
In short, it is not feasible to try and retain transaction integrity for
consumed messages when a failover event happens.

In your case, the transaction will rollback and the message will go to the
dlq. The scenario is that the first consumer gets the message and acks in a
transaction.
there is a failover, so the state is recreated, connection, multiple
consumers, transaction etc. However the broker dispatches to another
consumer, (the order of consumer recreation and of broker dispatch is not
deterministic) so the app would see a duplicate if this message gets
dispatched to another consumer while the current transaction is pending a
redelivery. It gets messy and it turns out that there are way to many
different failure scenarios to try and account for. Hence AMQ-5854 which
makes it very clear that an inflight transaction with pending acks will
rollback if there is a failover.


On Mon, 7 Dec 2015 at 02:25 yang.yang.zz <ya...@outlook.com> wrote:

> I have the same problem and my version is 5.11.1.
>
> Does AMQ-5795 solve this problem?
>
>
>
> --
> View this message in context:
> http://activemq.2283324.n4.nabble.com/What-is-duplicate-delivery-poison-ack-tp4688299p4704648.html
> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>

Re: What is duplicate delivery poison ack?

Posted by "yang.yang.zz" <ya...@outlook.com>.
I have the same problem and my version is 5.11.1.

Does AMQ-5795 solve this problem?



--
View this message in context: http://activemq.2283324.n4.nabble.com/What-is-duplicate-delivery-poison-ack-tp4688299p4704648.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.