如何从队列(消费者端)丢弃Tibco EMS消息

时间:2014-06-02 13:07:22

标签: java queue jms message-queue tibco

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

public void clearMessages() throws JMSException{

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

        return;
    }

1 个答案:

答案 0 :(得分:1)

选项1:您单独确认每条消息;但是,这种方法可能需要一些时间,如果您有(很多)数千条消息排队:

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

选项2:使用TibjmsAdmin对象清除JMS目标就像这样(单击TIBCO EMS Admin Java API for JavaDoc):

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,

亨德里克