我正在开发一个以前使用 OpenMQ 作为 JMS 提供程序的 java 服务程序,但我正在将其转换为使用 activemq-artemis。
我需要从 artemis 获取现有主题/队列的列表。到目前为止,我有下面的代码,这些代码是根据 artemis 附带的示例以及我在网上找到的一些其他代码示例开发的(不包括 try/catch):
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 没有记录任何类型的错误。如果我在 putAttribute 调用中使用字符串 queueNames,我会得到相同的结果。
我的代码有问题吗,或者有人可以让我了解可能发生的事情吗?
其他详细信息:artemis 服务器 2.1.0 和客户端代码在单个开发机器 JDK7u65 上本地运行,在此项目之外使用测试代码我可以发布和使用与 artemis 之间的简单消息。
谢谢。