Affects Version/s: 220.127.116.11-fuse
Fix Version/s: 18.104.22.168-fuse
Environment:Fuse MB 22.214.171.124, activemq-core, ActiveMQMessageConsumer.java
Spring 2.5.5 DMLC with cacheLevel=CACHE_NONE with JBoss 4.2.2 + XA transactions
Similar Issues:Show 10 results
MB-673 ActiveMQMessageConsumer incorrectly regards replayed message as a duplicate, logging 'ignoring (auto acking) duplicate', when failover: transport is used. MB-1133 DurableSubProcessWithRestartTest , acknowledged messages appear to intermittently be redelivered to the subscriber MB-645 Messages not delivered due to deadlock MB-355 When consuming using springs DMLC with cacheLevel=1 messages can be lost MB-531 staticallyIncludedDestinations set in a Network of Brokers results in duplicate messages MB-83 duplicate delivery, already consumed messages are reconsumed after server restart MB-381 Consumed messages re-appearing in the broker MB-639 Auto acknowledged session does not redeliver message in case of exception. MB-370 ArrayIndexOutOfBoundsException when resizing AMQ Message Store indexes and syncOnWrite=false MB-306 [SYS-TEST] Verify consumer failover between Networked brokers - no message loss
External Issue URL:
Redelivery of message fails after a rollback with Spring DMLC with cacheLevel=CACHE_NONE due to a bug in class : 'org.apache.activemq.ActiveMQMessageConsumer'. Redelivered messages are wrongly detected as duplicates. It fails to call 'rollbackDuplicates' on messages processed by consumer on rollback call on the consumer.
- Spring creates a transaction
- Spring creates a JMS consumer
- Spring give message to Application MessageListener class
- Spring closes the consumer
- Spring try to commit
- Commit fails due to a RuntimeException thrown in Application MessageListener class
- Spring marks the message as RollbackOnly
- Spring rollbacks message
When ActiveMQ closes the consumer ( org.apache.activemq.ActiveMQMessageConsumer ), it clears 'deliveredMessages' list. But this list is needed in rollback method of ActiveMQMessageConsumer to rollback duplicates ! Then consumer cannot rollback duplicates on rollback if consumer is closed before rollback action.
The only way I found, is to not clear 'deliveredMessages' list on close. It seems, there is no side effect, since after a call to 'close' method, the consumer is not used anymore.