Hello community,
we encountered a problem with temporary Queues when using Openwire with
Artemis.
Situation:
We want to use an Artemis broker with Applications communicating over
Openwire with JMS.
Specifically, we want to perform request reply using the reply-to field
and temporary queues.
For the broker we have an Artemis broker (Version 2.37).
The clients use the ActiveMQ classic client libraries.
For the reply we create a temporary queue with:
org.apache.activemq.ActiveMQSession.createTemporaryQueue()
First scenario: Temp queues working in same JVM:
We have a unit test where we send the request on a queue ("request-queue")
on the broker and create the temporary queue beforehand as described, to
receive the reply.
In the Unit test we also subscribe to that "request-queue" and if a
message is received we send a reply to the temporary queue (specified in
the JMS-reply-to field).
That works as we would expect and the reply is received on the temporary
queue.
Second scenario: Temp queues not working in different JVMs:
Now for the part where we encounter the error.
We set up the same scenario as in one, but not in a unit test but with two
different applications.
So one application with the activeMQ classic libraries that sets a
temporary queue, set the JMS-reply-to to that queue and send the message
to a queue ("request-queue") on the broker.
The second application subscribes to that "request-queue" and receives the
message.
We extract the temporary reply queue with Destination replyDestination =
msg.getJMSReplyTo();
But when we want to send the message we encounter the following error:
javax.jms.InvalidDestinationException: Cannot publish to a deleted
Destination: temp-queue://ID:NTNB794-64640-1739355767427-5:1:1
at
org.apache.activemq.ActiveMQSession.send(ActiveMQSession.java:1841)
at
org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:289)
at
org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:224)
at
de.systemagmbh.components.bus.activemq.CSysAMQServiceRunnerCallback.sendReply(CSysAMQServiceRunnerCallback.java)
at
de.systemagmbh.tools.bus.CSysServiceRunner.run(CSysServiceRunner.java)
at
de.systemagmbh.tools.bus.ASysServiceRunnerCallback.startServiceRunner(ASysServiceRunnerCallback.java)
at
de.systemagmbh.components.bus.activemq.CSysAMQServiceRunnerCallback.<init>(CSysAMQServiceRunnerCallback.java)
at
de.systemagmbh.components.bus.activemq.CSysAMQServiceSubjectDriver.onMessage(CSysAMQServiceSubjectDriver.java)
at
org.apache.activemq.ActiveMQMessageConsumer.dispatch(ActiveMQMessageConsumer.java:1390)
at
org.apache.activemq.ActiveMQSessionExecutor.dispatch(ActiveMQSessionExecutor.java:131)
at
org.apache.activemq.ActiveMQSessionExecutor.iterate(ActiveMQSessionExecutor.java:202)
at
org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:133)
at
org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:48)
at
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1583)
Have any of you encountered something similar or knows if we do something
wrong?
Kind regards Maximilian