首页 > 解决方案 > 如何使用 Java 在 IBM MQ 中循环读取消息

问题描述

我编写了 java 类来从 IBM MQ 队列中读取消息。当我使用 while 循环时,我能够读取队列中的第一条消息,而我无法读取第二条消息

public final void ReadMessage (String queueName) throws Exception {
    int options = MQC.MQOOINQUIRE + MQC.MQOOFAILIFQUIESCING + MQC.MQOOINPUTSHARED;
    System.out.printin ("start Creating the Queue....... )
    MQQueue myQueue = this.mqManager.accessQueue(queueName, options) ;

    MQMessage mgMessage = new MQMessage ( ) ;
    MQGetMessageOptions gmo = new MQGetMessageOptions ( ) ;
    gmo.options = MQC.MQGMO NO WAIT + MQC.MQGMO FAIL IF QUIESCING;
    gmo.matchOptions = MQC.MQMO NONE;
    gmo.waitlnterval = 15000;
    boolean msgqueue=true;
    while(msgqueue){
        try {

            System.out.println("end of get Message from myqueue") ;
            System.out.print In ("Message lenth" + mgMessage ( ) ) ;
            mgMessage.characterSet = 300;
            int length = mqMessage.getMessageLength( );

            System. out ( of the message" + length) ; 
                    System. out ( of the message" + mgMessage.readString(length)) ; 
                            gmo.options = MQC.MQGMOWAIT | MQC.MQGMOBROWSENEXT;

            if(mgMessage.getCurrentDepth()==1){
                msgqueue=false;
            }
        }
        catch (Exception e) {
            msgqueue=false;

        }
    }
}

我想知道我还需要添加什么才能移动队列中的下一条消息。

谢谢

标签: javaibm-mq

解决方案


我会尝试在 while 循环内移动两行,因为 queue.get() 调用会在返回时更新 MQMessage 对象实例。

   MQMessage mgMessage = new MQMessage ( ) ; 
   MQGetMessageOptions gmo = new MQGetMessageOptions ( ) ; 

由于为下一次调用传递了相同的 MQMessage 对象,因此 get 调用使用更新的 MQMessage 对象并尝试获取已获取的消息。


推荐阅读