Achilles
Achilles

Reputation: 741

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;
    }

Upvotes: 0

Views: 4509

Answers (1)

hsiegeln
hsiegeln

Reputation: 116

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

Upvotes: 1

Related Questions