Hello, we have a system that processes email requests that are dumped into a queue. The system is a war deployed on Tomcat 6.0.26. When Tomcat is restarted we're getting duplicate emails being sent. These appear to come from the default persistence provider's data file (activemq-data/localhost/journal/data-133). Every time we restart Tomcat, the same duplicate email gets sent. We have many old data-xxx files in the activemq-data/localhost/journal dir.
We're using an embedded activemq broker and the version of ActiveMQ is 5.2.0. Within our application we have one producer populating a queue and 4 consumers threads processing messages off that queue. We're using CLIENT_ACKNOWLEDGE. Why is it that the same messages get replayed when the server is restarted? I would have thought that after the first retry attempt, the client ack would have been received , the messages marked delivered, and the (old) activemq-data/localhost/journal/data-133 file deleted. Yet that isn't what is happening. Here is a snippet of the context.xml that sets up the JNDI: <Resource name="jms/ConnectionFactory" auth="Container" type="org.apache.activemq.ActiveMQConnectionFactory" description="JMS Connection Factory" factory="org.apache.activemq.jndi.JNDIReferenceFactory" brokerURL="vm:(broker:(tcp://localhost:61617,network:static:tcp:second:61617))?jms.redeliveryPolicy.maximumRedeliveries=7&jms.redeliveryPolicy.useExponentialBackOff=true" brokerName="LocalActiveMQBroker" useEmbeddedBroker="true"/> <Resource name="jms/queue/j2es0" auth="Container" type="org.apache.activemq.command.ActiveMQQueue" factory="org.apache.activemq.jndi.JNDIReferenceFactory" physicalName="j2es0"/> Here is a code snippet that sets up the receiver : // SETUP THE HIGHEST PRIORITY QUEUE // we use 4 threads for listening to this queue String queueName = jmsQueue+"0"; Queue queue = (Queue) env.lookup(queueName); // Start four receiver threads for the highest priority queue ('0') for ( int x = 0; x < 4; x++ ) { // Each listener must have a separate session in order to handle recovery properly QueueConnection connection = factory.createQueueConnection(); QueueSession tmp = connection.createQueueSession(false, javax.jms.Session.CLIENT_ACKNOWLEDGE); QueueReceiver receiver = tmp.createReceiver(queue); receiver.setMessageListener(new RecoverListener(engine, tmp)); connection.start(); receivers.add(receiver); log.info("adding listener to queue:"+queueName); } Thanks for your help. -- View this message in context: http://old.nabble.com/Duplicate-queued-messages-when-restarting-tomcat-tp28147462p28147462.html Sent from the ActiveMQ - User mailing list archive at Nabble.com.