簡體   English   中英

檢查傳入消息的 IBM WebSphere MQ 7.0 隊列的最佳方法

[英]The best way to check IBM WebSphere MQ 7.0 queue on incoming messages

我是 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 隊列中出現新的傳入消息時,獲得通知的最佳方法是什么?

謝謝你。

只需調用 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;

並按照以下獲取選項來獲取消息

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 線程/程序應該一直在那里運行你的類來監聽隊列

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM