我正在从队列中消耗Tibco JMS(EMS)消息...我想在每次运行应用程序时清除队列。我可以想到以下逻辑......我认为他们可能是一个更好的方式
public void clearMessages() throws JMSException{
Message msg = (Message) queueReceiver.receiveNoWait();
while(msg != null)
{
clearMessages();
}
return;
}
答案 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,
亨德里克