Search code examples
javaqueuejmsmessage-queuetibco

How to discard Tibco EMS messages from a queue (consumer side)


I am consuming Tibco JMS (EMS) messages from a queue... I want to clear the queue each time the application runs. I can think of the below logic... I thought their might be a better way

public void clearMessages() throws JMSException{

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

        return;
    }

Solution

  • Option 1: you acknowledge each message individually; this approach, however, may take some time, if you have (many) thousands of messages enqueued:

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

    Option 2: using the TibjmsAdmin Object purging a JMS destination is done like this (click 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,

    Hendrik