We have been experiencing issues with duplicate issues in several of our 
production environments.  The behaviour we see is that sometimes when our 
application starts it logs a “suppressing duplicate delivery” message for a 
message that has never been acknowledged.  After this occurs the consumers do 
not consume any more messages until we restart the application.  Normally that 
resolves the issue, the message is consumed successfully and continues to 
consume messages.  Occasionally it gets into the same state so we restart again.

An example of the suppressing duplicate delivery messages is;
ID:ip-10-210-179-152-19241-1722563936693-1:6:5:1 suppressing duplicate delivery 
on connection, poison acking: MessageDispatch {commandId = 0, responseRequired 
= false, consumerId = ID:ip-10-210-179-152-19241-1722563936693-1:6:5:1, 
destination =queue://TEMPLATE_ORCHESTRATION_MESSAGES, message = 
ActiveMQObjectMessage {commandId = 27442, responseRequired = true, messageId = 
ID:ip-10-210-181-64-5463-1722503120609-7:1:50:1:980, originalDestination = 
null, originalTransactionId = null, producerId 
=ID:ip-10-210-181-64-5463-1722503120609-7:1:50:1, destination = 
queue://TEMPLATE_ORCHESTRATION_MESSAGES, transactionId = null, deliveryTime = 
0, expiration = 0, timestamp = 1722565114517, arrival = 0, brokerInTime = 
1722565319026, brokerOutTime = 1722565319026, correlationId = null, replyTo = 
null, persistent = true, type = null, priority = 4, groupID = null, 
groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, 
content = 
org.apache.activemq.util.ByteSequence@222083bc<mailto:org.apache.activemq.util.ByteSequence@222083bc>,
 marshalledProperties = 
org.apache.activemq.util.ByteSequence@44247f43<mailto:org.apache.activemq.util.ByteSequence@44247f43>,
 dataStructure = null, redeliveryCounter = 3, size = 0, properties = 
{WORKSPACE_ID=66ac0e4ef78b094c390c1d6b, 
x__dash__datadog__dash__trace__dash__id=8195324751683450459,x__dash__datadog__dash__sampling__dash__priority=1,
 
x__dash__datadog__dash__parent__dash__id=2836570378207542649,scheduledJobId=ID:ip-10-210-181-64-5463-1722503120609-7:1:50:1:529018,
 
TEMPLATE_PURCHASE_ID=66ac0e4ef78b094c390c1d7b,tracestate=dd=t.dm:-1;t.tid:66ac41bd00000000,
 CALLER_REFERENCE_ID=66ac0e470cfa9827bc10744c, 
traceparent=00-66ac41bd0000000071bba470e30ef65b-275d85baed74bd79-01, 
redeliveryDelay=25000,x__dash__datadog__dash__tags=_dd.p.dm=-1,_dd.p.tid=66ac41bd00000000},
 readOnlyProperties = true, readOnlyBody = true, droppable = false, 
jmsXGroupFirstForConsumer = false}, redeliveryCounter = 3}

We are using Amazon MQ with ActiveMQ version 5.16.3 (although we experienced 
this issue on previous versions too).
Our java application is using  org.apache.activemq:activemq-client:5.16.3.

The Spring config is;

@Bean
public ConnectionFactory 
jmsConsumerConnectionFactory(@Value("${jms.broker.url}") String jmsBrokerUrl,
                                                      
@Value("${jms.broker.username}") String username,
                                                      
@Value("${jms.broker.password}") String password,
                                                      RedeliveryPolicyMap 
consumerRedeliveryPolicyMap,
                                                      ActiveMQPrefetchPolicy 
prefetchPolicy) {
    return activeMQConnectionFactory(jmsBrokerUrl, username, password, 
consumerRedeliveryPolicyMap, prefetchPolicy, "enc-consumer");
}

private ActiveMQConnectionFactory activeMQConnectionFactory(String 
jmsBrokerUrl, String username, String password, RedeliveryPolicyMap 
consumerRedeliveryPolicyMap, ActiveMQPrefetchPolicy prefetchPolicy, String 
clientIdPrefix) {
    ActiveMQConnectionFactory connectionFactory = new 
ActiveMQConnectionFactory(jmsBrokerUrl);
    connectionFactory.setUserName(trimToNull(username));
    connectionFactory.setPassword(trimToNull(password));

    connectionFactory.setObjectMessageSerializationDefered(true);
    connectionFactory.setAlwaysSyncSend(true);
    connectionFactory.setTrustAllPackages(true);
    connectionFactory.setRedeliveryPolicyMap(consumerRedeliveryPolicyMap);
    connectionFactory.setPrefetchPolicy(prefetchPolicy);

    connectionFactory.setClientIDPrefix(clientIdPrefix);

    return connectionFactory;
}


protected DefaultJmsListenerContainerFactory 
defaultJmsListenerContainerFactory(boolean autoStartupEnabled, String 
concurrency, ErrorHandler errorHandler) {
    DefaultJmsListenerContainerFactory factory = new 
DefaultJmsListenerContainerFactory();
    factory.setConcurrency(concurrency);
    factory.setConnectionFactory(jmsConsumerConnectionFactory);
    factory.setTransactionManager(localJmsTransactionManager);
    factory.setErrorHandler(errorHandler);
    factory.setAutoStartup(autoStartupEnabled);
    factory.setCacheLevel(CACHE_CONSUMER);

    return factory;
}

and the broker URI is typically;


jms.broker.url="failover:(ssl://b-7cef9e05-66d6cbcf570b-1.mq.eu-west-2.amazonaws.com:61617,ssl://b-7cef9e05-66d6cbcf570b-2.mq.eu-west-2.amazonaws.com:61617)?initialReconnectDelay=100&maxReconnectAttempts=10&jms.checkForDuplicates=true&jms.watchTopicAdvisories=false&jms.prefetchPolicy.queuePrefetch=0&nested.wireFormat.maxInactivityDuration=1800000&nested.wireFormat.maxFrameSize=104857600"

I’ve debugged the client code to try and see where it’s detecting the duplicate 
and it seems to have the duplicate message id in it’s cache.  It’s difficult to 
reproduce and so it’s hard to tell if does indeed get the same message twice 
but given it doesn’t handle the message at all then I’m suspecting the cache is 
incorrectly preloaded.  Could it be that it’s caching to the filesystem and 
when the application restarts it reloads the cache?

Would appreciate any help as we really want duplicate detection enabled.

Regards
Ben




[https://6032599.fs1.hubspotusercontent-na1.net/hubfs/6032599/Email%20images/Encompass%20logo/Encompass-(full)_300x52.png]

The leader in Corporate Digital Identity

Website<https://www.encompasscorporation.com/> |  
LinkedIn<https://www.linkedin.com/company/encompass-corporation/>

Encompass Corporation UK Ltd | Company No. SC493055 | Address: Level 3, 33 
Bothwell Street, Glasgow, UK, G2 6NL
Encompass Corporation Australia PTY Ltd | 605 414 499| Address: Level 1, 117 
Clarence Street, Sydney, New South Wales, 2000
Encompass Corporation US Inc | Company No. 7946259 | Address: 11 West 42nd 
Street, New York, New York, 10036

This email and any attachments is intended only for the use of the individual 
or entity named above and may contain confidential information. If you are not 
the intended recipient, any dissemination, distribution or copying of this 
email is prohibited. If received in error, please notify us immediately by 
return email and destroy the original message.






Public

Reply via email to