Hi all, This is a follow on from the thread "Temp queue vs topic with message selectors?", where I was having difficulty with temp queues.
See also : https://issues.apache.org/activemq/browse/AMQ-1375 AMQ-1375 Anyway, following some investigation I have encountered a situation where temp queues are deleted by AMQ incorrectly(I think anyway)......it happens if you interrupt the thread that is calling producer.send(message); , and in the same thread call this method again, AMQ then deletes the temp queue. It is reproducible and I have attached a java project containing all required info. Required jars are 1) apache-activemq-4.1.1.jar 2) spring.jar (version 2.0.2 I had) 3) xbean-spring-2.8.jar 4) junit.jar Main class is AMQTest, which is a Junit test. My setup is as follows: 1) Embedded broker on server side AMQ 4.1.1 2) One client, it creates a temp queue and requests server to send data back on it. This is implemented as a Runnable submitted to an executor on the server and generates a job ID, which is returned to the client. 3) Client asks server in a loop to send data (say 10 times, hence 10 Runnables submitted) AND cancels the last job based on the ID, hence I should get all the messages for the last job. 4) Server task will fail to send data once it is interrupted, which is fine but if you continue to try and send again following the first InterruptedIOException, the temp queue is deleted. After this I dont get any data obviously. I have done some debugging and have found the reason for it & also how to solve it. My activemq.xml file defines 2 transport connectors, one VM and one TCP. My server side connection factory uses the VM URL for its brokerURL property. This is to save a network hop as broker is embedded. To simulate client being in another JVM, my receiver uses TCP URL to connect to the broker. So then when I send data, AMQ magically puts it from VM to TCP. Once the InterruptedIOException occurs, I can still create a MessageProducer as its only towards the VM broker, but the send of the message fails & deletes the queue. The solution is to pass the TCP URL to the senderConnectionFactory as well, which works fine, I get all the messages for the last requested job. This is not really an issue except I lose the benefit of having an internal broker. I would like to know if this is expected behaviour or a bug & why it is happening? To get the attached junit test to pass, simply change the brokerURL of the "senderConnectionFactory" bean from <property name="brokerURL" value="${internal.broker.url}"/> to <property name="brokerURL" value="${external.broker.url}"/> by switching the comments around in topology-test.xml. Also attached is the print of test case failing and also where it succeeds....if you don't wanna run it ;) Thanks /Tom http://www.nabble.com/file/p12527277/AMQ_Test.zip AMQ_Test.zip http://www.nabble.com/file/p12527277/failed.txt failed.txt http://www.nabble.com/file/p12527277/succeeded.txt succeeded.txt -- View this message in context: http://www.nabble.com/Temp-queue-deleted-when-thread-interrupted-tf4393533s2354.html#a12527277 Sent from the ActiveMQ - User mailing list archive at Nabble.com.