我是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队列中出现新的传入消息时,通知的最佳方法是什么?
谢谢。
答案 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线程/程序一直在运行您的类,以监听队列