Java 检查传入消息的IBM WebSphere MQ 7.0队列的最佳方法

Java 检查传入消息的IBM WebSphere MQ 7.0队列的最佳方法,java,ibm-mq,Java,Ibm Mq,我是IBMWebSphereMQ的新手,我想问一下解决以下任务的最佳方法 我使用WebSphereMQ7.0,并实现了一个java应用程序来检查传入消息上的MQ队列 通过以下代码打开的传入队列: int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_INQUIRE; MQQueue incomingQueue = qManager.accessQueue(qName, openOptions, null, null, nu

我是IBMWebSphereMQ的新手,我想问一下解决以下任务的最佳方法

我使用WebSphereMQ7.0,并实现了一个java应用程序来检查传入消息上的MQ队列

通过以下代码打开的传入队列:

int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_INQUIRE;
MQQueue incomingQueue = 
          qManager.accessQueue(qName, openOptions, null, null, null);
现在,任务是当新消息出现在
incomingQueue
中时,以实时模式进行检查并进行处理

我通过调用while循环中的
incomingQueue.getCurrentDepth()
,永久性地检查队列深度,并检查它是否大于零,然后我会收到新消息

这是可行的,但我认为这不是一个好办法

当MQ队列中出现新的传入消息时,最好的通知方法是什么

谢谢。

只需调用queue.Get(msg)方法即可。这是一个阻塞调用,仅当队列中有消息时才会返回

如果上述内容不适合,因为它是一个阻塞调用,那么您可以查看提供消息侦听器的WMQ JMS。消息侦听器用于接收回调方法上的消息,而主线程可以继续执行其他工作


MQ附带了一些很好的示例。您可以在(Windows上的)\tools\jms\samples和tools\wmqjava\samples下找到它们。

尝试使用以下打开的选项访问队列

openOptions = MQConstants.MQOO_INQUIRE + MQConstants.MQOO_FAIL_IF_QUIESCING
                        + MQConstants.MQOO_INPUT_AS_Q_DEF + MQConstants.MQOO_READ_AHEAD;
和下面的get选项来获取消息

MQGetMessageOptions getOptions = new MQGetMessageOptions();
            getOptions.options = MQConstants.MQGMO_WAIT + MQConstants.MQGMO_PROPERTIES_COMPATIBILITY
                    + MQConstants.MQGMO_ALL_SEGMENTS_AVAILABLE + MQConstants.MQGMO_COMPLETE_MSG
                    + MQConstants.MQGMO_ALL_MSGS_AVAILABLE;
MQConstants.MQGMO_WAIT
选项将帮助我们在到达队列时读取消息。但是要确保有一个Java线程/程序一直在那里运行您的类来监听队列