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

时间:2011-11-15 10:34:46

标签: java ibm-mq

我是IBM WebSphere MQ的新手,我想问你解决以下任务的最佳方法。

我使用WebSphere MQ 7.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队列中出现新的传入消息时,通知的最佳方法是什么?

谢谢。

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

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

openOptions = MQConstants.MQOO_INQUIRE + MQConstants.MQOO_FAIL_IF_QUIESCING
                        + MQConstants.MQOO_INPUT_AS_Q_DEF + MQConstants.MQOO_READ_AHEAD;

并遵循获取消息的选项

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线程/程序一直在运行您的类,以监听队列