簡體   English   中英

從 ActiveMq 中的隊列中刪除消息

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM