我正在从队列中使用Tibco JMS(EMS)消息...我想在每次运行应用程序时清除队列。我可以想到以下逻辑...我认为他们可能是更好的方法

public void clearMessages() throws JMSException{

        Message msg = (Message) queueReceiver.receiveNoWait();
        while(msg != null)
        {
            clearMessages();
        }

        return;
    }

最佳答案

选项1:您分别确认每条消息;但是,如果您有(许多)数千条消息入队,则此方法可能需要一些时间:

public void clearMessages() throws JMSException{
    Message message = null;
    do {
        message = consumer.receiveNoWait();
     if (message != null) message.acknowledge();
    }
    while (message != null);
}


选项2:使用TibjmsAdmin对象清除JMS目标的操作是这样的(对于JavaDoc单击TIBCO EMS Admin Java API ):

public void clearMessages(String queueName) throws TibjmsAdminException, TibjmsAdminInvalidNameException{
    TibjmsAdmin jmsAdmin = new TibjmsAdmin("tcp://localhost:7222", "admin", "admin");
    jmsAdmin.purgeQueue(queueName);
    // alternatively purge all queues:
    // jmsAdmin.purgeQueues(">");
}


HTH,

亨德里克

08-05 05:44