我正在开发一个以前使用OpenMQ作为JMS的java服务程序,但我正在将其转换为使用activemq。
我需要从artemis获得现有主题/队列的列表。到目前为止,我有下面的代码,这些代码是从artemis附带的示例中开发出来的,并结合了我在web上找到的一些其他代码示例(留下了try/catch out):
TransportConfiguration tportConfig = new TransportConfiguration(NettyConnectorFactory.class.getName());
QueueConnectionFactory qcf = (QueueConnectionFactory) ActiveMQJMSClient.createConnectionFactoryWithoutHA(JMSFactoryType.QUEUE_CF, tportConfig);
QueueConnection qConn = qcf.createQueueConnection();
QueueSession session = qConn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
javax.jms.Queue managementQueue = ActiveMQJMSClient.createQueue("activemq.management");
QueueRequestor requestor = new QueueRequestor(session, managementQueue);
qConn.start();
Message mgtMsg = session.createMessage();
JMSManagementHelper.putAttribute(mgtMsg, org.apache.activemq.artemis.api.core.management.ResourceNames.JMS_SERVER, "topicNames");
Message reply = requestor.request(mgtMsg);跨过调试器中的每一行,代码一直工作到最后的requestor.request()方法调用为止。在调用这一点之后,线程似乎出现了黑洞。调试器不会进入下一行,catch块也不会启动,artemis.log也不会记录任何类型的错误。如果在queueNames调用中使用字符串putAttribute,则得到相同的结果。
我的代码有问题吗,或者有人能给我一些关于可能发生的事情的洞察力?
其他详细信息: artemis服务器2.1.0和客户端代码在单个开发机器JDK7u65上本地运行,在本项目之外的测试代码中,我可以向artemis发布和使用一条简单的消息。
谢谢。
发布于 2018-01-11 20:40:33
...the代码一直工作到最后的requestor.request()方法调用为止。在调用这一点之后,线程似乎出现了黑洞。调试器不会进入下一行,catch块也不会启动,artemis.log也不会记录任何类型的错误。
当JMS请求者没有收到它发送的请求的响应时,这听起来就像是JMS请求者的正常行为。
artemis服务器2.1.0和客户端代码在单个开发机器上本地运行
您试图使用的常量org.apache.activemq.artemis.api.core.management.ResourceNames.JMS_SERVER实际上并不存在于Artemis2.1.0中。您的客户端必须使用1.x库,而不是这里所描述的库,否则您将得到编译错误。
这很可能是你问题的根源。换句话说,您正在尝试管理实际上不存在的资源(即JMS服务器)。
尽管如此,我还是希望代理会记录一条警告消息,警告您无法找到资源。
我建议:
https://stackoverflow.com/questions/48193921
复制相似问题