[
https://issues.apache.org/jira/browse/AMQ-6155?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15151462#comment-15151462
]
masc commented on AMQ-6155:
---------------------------
I'm seeing the same issue with a single connection creating a temporary queue
and sending a request/response to a network of brokers. The message is
sporadically delivered before the temporary queue is available in the remote
broker, resulting in the same error/stacktrace when sending the reply.
Should the issue be reopened?
> Spurious InvalidDestinationException publishing to a temp queue from a new
> connection
> -------------------------------------------------------------------------------------
>
> Key: AMQ-6155
> URL: https://issues.apache.org/jira/browse/AMQ-6155
> Project: ActiveMQ
> Issue Type: Bug
> Components: JMS client
> Affects Versions: 5.10.2, 5.13.0
> Environment: Windows, OS X
> Reporter: Kevin Bowman
> Attachments: AmqTempRaceConditionMinimalTest.java
>
>
> When a new connection is opened for the purpose of sending a message to a
> temporary queue it sometimes fails with the following exception (stack trace
> is from v5.13.0):
> javax.jms.InvalidDestinationException: Cannot publish to a deleted
> Destination: temp-queue://ID:Potomac.local-59943-1454448412194-1:1:96
> at org.apache.activemq.ActiveMQSession.send(ActiveMQSession.java:1904)
> at
> org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:288)
> at
> org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:223)
> at
> org.apache.activemq.ActiveMQMessageProducerSupport.send(ActiveMQMessageProducerSupport.java:241)
> The actual problem appears to be in ActiveMQConnection.isDeleted(). Because
> the connection being used to send to the temp queue is not the connection
> under which the temp queue was created, it's dependent on AdvisoryConsumer to
> populate the activeTempDestinations map before the send() call is made. The
> AdvisoryConsumer gets called in a separate thread, asynchronous with the main
> thread, so this constitutes a race condition. If the send() call is made
> before AdvisoryConsumer can notify the new connection of all existing temp
> queues then it will throw an InvalidDestinationException even though the temp
> queue does actually exist.
> Calling setWatchTopicAdvisories(false) on the sending connection's factory
> alleviates the problem and the program can run indefinitely with no errors.
> Also, adding a delay before the MessageProducer.send() call can alleviate the
> error somewhat, but with a small enough delay it will still happen eventually.
> I noticed this first in an environment I don't have full control over. It
> happened the first time, every time, for reasons I still don't quite
> understand. I have written a small test program that reproduces the error
> outside of the original environment, but it runs in a loop and it takes a few
> hundred iterations for it to occur.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)