使用来自IBM MQ的所有消息

2022-04-12 00:00:00 java ibm-mq jms mq

我要使用来自MQ的所有消息。

public static void main(String[] args)
{ 
 JMSContext context = null;
 Destination destination = null;
 JMSConsumer consumer = null;

 JmsFactoryFactory FF = JmsFactoryFactory.getInstance(WMQConstants.WMQ_PROVIDER);
 JmsConnectionFactor CF = FF.createConnectionFactory();
  context = CF.createContext();
  destination = context.createQueue(QUEUE_NAME);
  consumer = context.createConsumer(destination);
  String msg = consumer.receiveBody(String.class, 15090);
  System.out.println(msg);
 }

它只能读取一条消息。我如何才能消费所有消息?此外,有没有更简单的方法来删除队列中的所有消息,而不需要阅读或消费它们?


解决方案

JMS API一次使用一条消息,因此您需要将receiveBody放入循环中,例如:

public static void main(String[] args) { 
   JMSContext context = null;
   Destination destination = null;
   JMSConsumer consumer = null;

   JmsFactoryFactory FF = JmsFactoryFactory.getInstance(WMQConstants.WMQ_PROVIDER);
   JmsConnectionFactor CF = FF.createConnectionFactory();
   context = CF.createContext();
   destination = context.createQueue(QUEUE_NAME);
   consumer = context.createConsumer(destination);
   String msg = null;
   do {
      msg = consumer.receiveBody(String.class, 15090);
      System.out.println(msg);
   } while (msg != null);
}

receiveBody返回null表示队列中没有更多消息。

JMS API没有定义从队列中删除所有消息的任何方法,但大多数JMS服务器都有特定于实现的管理API,您可以通过该API执行这些操作。

相关文章