作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个生产者,它连接到 ActiveMQ 代理以向客户端发送消息。
这在大多数情况下工作正常,但偶尔应用程序会抛出错误消息,指出“无法使用从另一个连接创建的队列”。
我无法确定是什么原因导致这种情况发生,因为临时队列是从当前 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/
我是一名优秀的程序员,十分优秀!