【发布时间】:2018-09-28 09:39:16
【问题描述】:
我有一个包含多个 activeMq 队列的应用程序。我想列出其中的消息,并根据消息的 id 从任何队列中删除任何消息。
这是我目前的代码。
public void killMessage(String id) {
try {
ActiveMQConnection activeMqConnection = (ActiveMQConnection) connectionFactory.createConnection();
activeMqConnection.start();
DestinationSource destinationSource = activeMqConnection.getDestinationSource();
Set<ActiveMQQueue> queues = destinationSource.getQueues();
QueueSession queueSession = activeMqConnection.createQueueSession(true, Session.CLIENT_ACKNOWLEDGE);
for(ActiveMQQueue queue : queues) {
QueueBrowser browser = queueSession.createBrowser(queue);
Enumeration<?> messagesInQueue = browser.getEnumeration();
while (messagesInQueue.hasMoreElements()) {
Message message = (Message) messagesInQueue.nextElement();
System.out.println("Current id: " + message.getJMSMessageID());
if(message.getJMSMessageID().equals(id)){
System.out.println("-----message id found-------");
}
}
}
activeMqConnection.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
我遍历所有队列,然后遍历每个队列中的所有消息。我什至找到了我想删除的消息,但我找不到将其从队列中删除的方法。
编辑:
我还创建了一个消费者。我不确定消费者应该如何让消息从队列中消失。我的尝试完全没有效果,消息保留在队列中,我没有收到错误消息,也没有抛出异常,这可能表明消费者与消息不匹配:
if(message.getJMSMessageID().equals(id)){
System.out.println("-----message id found-------");
MessageConsumer consumer = queueSession.createConsumer(queue, "JMSMessageID='" + id + "'");
consumer.receive();
consumer.close();
}
【问题讨论】:
-
定义“不起作用”,因为当你运行它时我们不知道发生了什么。
-
我的回答是否解决了您的问题?如果是这样,请将其标记为正确,以帮助将来可能有同样问题的其他人。谢谢!