【发布时间】:2016-09-01 16:19:28
【问题描述】:
我正在尝试通过我的 JUnit 测试从嵌入式 ActiveMQ 获取我的主题的订阅统计信息。我能够订阅该主题,向该主题发送消息,并能够在我的侦听器/订阅者中接收该消息。
但是,当我尝试从该 ActiveMQ 获取统计信息时,消费者接收超时。如果我不添加“receiveTimeout”,那么消费者会无限期地等待消息。这是我的统计代码:
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("vm://localhost?broker.persistent=false");
connectionFactory.setStatsEnabled(true);
Connection connection = connectionFactory.createConnection();
connection.setClientID(format("ActiveMqStatistics-%s", System.nanoTime()));
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue replyTo = session.createTemporaryQueue();
MessageConsumer consumer = session.createConsumer(replyTo);
String queueName = "ActiveMQ.Statistics.Subscription";
Queue testQueue = session.createQueue(queueName);
MessageProducer producer = session.createProducer(testQueue);
Message msg = session.createMessage();
msg.setJMSReplyTo(replyTo);
producer.send(msg);
System.out.println("Statistics request sent. Waiting to receive reply...");
long receiveTimeout = 5000L;
MapMessage reply = (MapMessage) consumer.receive(receiveTimeout);
assertNotNull(reply);
for (Enumeration e = reply.getMapNames();e.hasMoreElements();) {
String name = e.nextElement().toString();
System.out.println(name + "=" + reply.getObject(name));
}
connection.close();
我得到断言失败,因为“回复”为空。
有什么想法吗?
【问题讨论】:
-
您的代理中是否安装了 StatisticBrokerPlugin?
-
Tim:不,我使用的是虚拟嵌入式 activemq,即代理 URL 是“vm://localhost?broker.persistent=false”。根据文档 (activemq.apache.org/statisticsplugin.html),这应该是支持的。