Messages can get poisonAcked in error as duplicate deliveries when a local transaction rollback during/after a failover (auto reconnect) event.
The interaction between rollback and failover redelivery has a bunch of timing issues and did create duplicates in-error that resulted in over eager suppression.
There are a bunch of related tests that validate expected behaviour, the related fixes needed to be revisited to better manage the delivered and unconsumed messages in the context of a local transaction and to avoid the real duplication of delivery in the client.
There is an additional new test that demonstrates the additional dlq or duplicates behaviour.
a nice cross section from the unit test suite is:
mvn clean install -Dtest=CloseRollbackRedeliveryQueueTest,AMQ2149Test,JMSQueueRedeliverTest,RedeliveryPolicyTest,FailoverTransactionTest,FailoverDurableSubTransactionTest,JMSConsumerTest,JmsSessionRecoverTest,AMQ2751Test