[英]Remove message from a queue in ActiveMq
我有一個包含多個 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();
}
如果要使用 JMS API 來執行此操作,則必須創建一個使用者並使用選擇器來使用具有所需 ID 的消息。 隊列瀏覽器不能消費消息; 它只能瀏覽它們。
在您粘貼的代碼中,您正在創建一個事務處理會話,這意味着當您使用消息時,您需要提交會話,否則該消息將永遠不會被確認。 也就是說,您最好使用AUTO_ACKNOWLEDGE
創建非事務性會話。
此外,您可能希望調用receive(int)
(即超時),以便如果選擇器由於某種原因無法找到消息,您的應用程序不會一直坐在那里等待方法返回。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.