gpt4 book ai didi

javax.jms.InvalidDestinationException : Cannot use a Temporary destination from another Connection

转载 作者:行者123 更新时间:2023-12-02 00:38:31 25 4
gpt4 key购买 nike

我有一个生产者,它连接到 ActiveMQ 代理以向客户端发送消息。

  1. 由于它期望来自客户端的一些响应,因此它首先创建一个临时队列并将其与 JMS 回复 header 相关联。
  2. 然后,它将消息发送到代理,并在临时队列上等待客户端的响应。
  3. 通过临时队列接收客户端的响应,执行所需的操作,然后退出。

这在大多数情况下工作正常,但偶尔应用程序会抛出错误消息,指出“无法使用从另一个连接创建的队列”。

我无法确定是什么原因导致这种情况发生,因为临时队列是从当前 session 本身创建的。

还有其他人遇到过这种情况并知道如何解决吗?

代码片段:

Connection conn = myJmsTemp. getConnectionFactory().createConnection();
ses = conn.createSession(transacted,ackMode);
responseQueue = ses.createTemporaryQueue();
...
MyMessageCreator msgCrtr = new MyMessageCreator(objects,responseQueue);
myJmsTemp.send(dest, msgCrtr);
myJmsTemp.setReceiveTimeout(timeout);
ObjectMessage response = (ObjectMessage)myJmsTemplate.receive(responseQueue);

这里MyMessageCreator实现了MessageCreator接口(interface)。

我要做的就是向代理发送消息并通过临时队列等待客户端的响应。我还使用池连接工厂来获取连接。

最佳答案

如果您有一个客户端尝试作为使用者订阅由不同连接实例创建的临时目标,您会收到类似的错误。 JMS 规范定义只有创建临时目标的连接才能使用它,因此这就是存在限制的原因。至于你看到它的原因,如果没有看到遇到错误的代码,很难说。

鉴于您的更新表明您正在使用池连接工厂,我猜这是您问题的根源。如果消耗调用碰巧使用池中的连接与创建临时目标的连接不同,那么您将看到您提到的错误。

关于javax.jms.InvalidDestinationException : Cannot use a Temporary destination from another Connection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7049818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com