Hi, I'll put my questions up the top so they don't get lost, see background below for the context.
Question 1 - I do not want duplicate detection (1) to roll back entire transactions. Is there a way to change the behaviour so that the entire transaction does not get rolled back? The behaviour I would like is to either silently drop the single duplicate message and commit the rest of the transaction, or not be enabled at all (as the application has duplicate detection). Question 2 - I think consuming a message from artemis using the openwire protocol sets the _AMQ_DUPL_ID header on the consumed message which is available to the client to read (2). Is there anything in the activemq classic openwire or qpid jms amqp libraries that would result in this property being set under the covers when sending a message? Background: I ran into issue where artemis' duplicate detection triggered, causing transaction rollback. I say unexpected because we don't set the duplicate detection header explicitly in our code. Artemis 2.20.0. Communication is using the Openwire protocol with ActiveMQ Classic JMS client libraries. The application is Apache Camel based. There's a route that reads multiple messages from queue "A", does "stuff", then sends them onto another queue "B" using a JMS transacted session. The problem encountered was a failure in committing the transaction after writing to queue "B": 2022-02-14 12:52:16.898 INFO ||ID-syn-ang-rbau-csp-1a-1644803524964-0-40| 1593489 --- [n.FromCSPSigned] org.apache.activemq.TransactionContext : commit failed for transaction TX:ID:hostname-44825-1644803526098-1:1:4 javax.jms.JMSException: org.apache.activemq.artemis.api.core.ActiveMQDuplicateIdException: Duplicate message detected - message will not be routed. Message information:CoreMessage[ <snip> _AMQ_DUPL_ID=ID:hostname1-42351-1643245903980-1:132:2746:5:1, <snip> This caused a rollback & retry in the camel route (expected) which continued to fail with the same exception until retries were exceeded and the batch of messages was moved from queue "A" to the DLQ. I believe the way the header got onto the message being sent was: 1. When sending messages to an openwire consumer that uses the failover transport, artemis adds the _AMQ_DUPL_ID header to the message. (2) 2. Camel copies all JMS headers to camel message headers when consuming a JMS message. 3. Camel copies all camel messages headers to JMS headers when sending a JMS message. And so #3 dutifully set the _AMQ_DUPL_ID header. I think the solution is for our camel application to use header filters on the camel components so that #2/#3 does not occur. But I'm concerned about other ways this header might get set - hence question 1 and 2 at the start of the email. Thanks for your time and guidance. Brad Harvey (1) https://activemq.apache.org/components/artemis/documentation/latest/duplicate-detection.html (2) https://github.com/apache/activemq-artemis/blob/1e6297957766138c312273cbbd15327c22f91c53/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/amq/AMQSession.java#L397 The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential and / or privileged material that may be governed by confidential information provisions contained in the agreement between GBST and your company. Any disclosure, copying, distribution, or other use without the express consent of the sender is prohibited. If you received this in error, please contact the sender and delete the material from any computer. All rights in the information transmitted, including copyright, are reserved. Nothing in this message should be interpreted as a digital signature that can be used to authenticate a document. No warranty is given by the sender that any attachments to this email are free from viruses or other defects.