【问题标题】:The best way to check IBM WebSphere MQ 7.0 queue on incoming messages检查传入消息的 IBM WebSphere MQ 7.0 队列的最佳方法
【发布时间】:2020-02-11 11:14:45
【问题描述】:

我是 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 队列中时得到通知的最佳方法是什么?

谢谢。

【问题讨论】:

    标签: java ibm-mq


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      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 线程/程序应该一直在那里运行你的类来监听队列

      【讨论】:

        猜你喜欢
        • 2013-10-20
        • 2016-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多