Java ActiveMQ-从JMS远程主机接收时无法识别对象
我正在两台JBoss服务器上设置JMS请求-应答。 在客户机中,我使用camel jms和Fuse route创建调用Java ActiveMQ-从JMS远程主机接收时无法识别对象,java,jms,activemq,instanceof,activemq-artemis,Java,Jms,Activemq,Instanceof,Activemq Artemis,我正在两台JBoss服务器上设置JMS请求-应答。 在客户机中,我使用camel jms和Fuse route创建调用 .setExchangePattern(ExchangePattern.InOut) .to(camelContext.getEndpoint(JMS_BEANID,JmsQueueEndpoint.class)) 基本上,它将创建临时队列并发送到服务器。 在服务器中,我创建了MessageListener的实现来监听消息 从调试视图message.getJMSReplyTo
.setExchangePattern(ExchangePattern.InOut)
.to(camelContext.getEndpoint(JMS_BEANID,JmsQueueEndpoint.class))
基本上,它将创建临时队列并发送到服务器。
在服务器中,我创建了MessageListener
的实现来监听消息
从调试视图message.getJMSReplyTo()
返回ActiveMQTemporaryQueue
的实例。但是,当我尝试检查ActiveMQTemporaryQueue的message.getJMSReplyTo()实例时,它返回false
。我尝试自己创建ActiveMQTemporaryQueue
check返回预期的true
,例如:
public-void-onMessage(消息消息){
Destination replyTo=message.getJMSReplyTo();
if(replyTo instanceof ActiveMQTemporaryQueue){
//false,尽管调试器显示它是ActiveMQTemporaryQueue对象
}
目标测试=新的ActiveMQTemporaryQueue(“本地主机”、“测试队列”、“ActiveMQSession”会话);
if(ActiveMQTemporaryQueue的测试实例){
//真的
}
}
客户机和服务器位于两个不同的Maven项目中(两个不同的war,部署到不同的服务器上,相同的工作区)
我不知道发生了什么事。你有什么建议吗?我猜这是一个类加载问题,但根据你提供的信息很难判断
尽管如此,我强烈建议您不要在代码中使用任何实现对象(即ActiveMQTemporaryQueue
)。如果您试图做的只是请求/回复,那么绝对不需要使用任何实现对象。如果需要知道getJMSReplyTo()
返回的值是否是临时队列,那么只需使用replyTo instanceof javax.jms.TemporaryQueue
。如果您这样做,我认为您的问题将得到解决。为什么要使用实现对象(即ActiveMQTemporaryQueue
)?为什么不简单地测试replyTo
是否是javax.jms.TemporaryQueue
的一个实例呢?基本上,我只需要获取JMSReplyTo并使用messageProducer.send(replyTo,response);发送回数据。但是在send方法内部,它检查replyTo对象是否是ActiveMQDestination的实例(ActiveMQTemporaryQueue是该类的子类)。奇怪的是,检查返回false,我上面的代码块就是这个问题的一个例子:(您没有回答我的问题。为什么它必须检查replyTo
是否是ActiveMQTemporaryQueue
的实例?您不需要这样做,只需使用消息生成器将消息发送到目标。从调试视图中,我可以看到该对象是ActiveMQTemporaryQueue。因此,我尝试使用确切的对象返回来查看什么是ha。)正在出现。我仍然不知道发生了什么。但我通过定义回复队列而不是依赖临时队列来实现它。感谢关注此问题。