消息選擇器是否也可以與 receiveNowait() 方法一起用于同步過程。它適用于receive() 方法,但想知道IBM mq 的receiveNoWait。創建消費者時添加消息選擇器。編輯 1:我已經使用 receiveNowait() 方法進行了測試,并且選擇器不起作用。我不知道問題出在我的選擇器或 receivenowait 方法上。以下是我使用的選擇器:String messageSelector = "JMSTimestamp <= " + System.currentTimeMillis() - 180000;
receiver = (MessageConsumer) session.createConsumer(replyQueue, messageSelector);這意味著,接收者只能接收比當前時間早 3 分鐘的消息。誰能弄清楚是什么問題。編輯2:完成測試后,我發現問題出在選擇器上,JMSTimeStamp 在選擇器表達式中的正確用法是什么?
3 回答

肥皂起泡泡
TA貢獻1829條經驗 獲得超6個贊
pepared system.currnetTimeMillis() 值在選擇器運行時不會更新。
在這里,您將在初始化選擇器時修復“當前”時間戳。您應該為您的查詢執行類似“endValidityDate <= (JMSTimestamp-24 60 1000)”的查詢(與任何使用固定值而不是動態值的 SQL 查詢相同的問題)。

森欄
TA貢獻1810條經驗 獲得超5個贊
我不能專門談論 IBM MQ 實現,但從 JMS 的角度來看,JMS 規范中沒有任何內容限制選擇器的使用,receiveNoWait
因此我希望它可以在任何兼容的實現中工作。

楊魅力
TA貢獻1811條經驗 獲得超6個贊
receive()、receive(long timeout) 和 receiveNoWait() 在交付內容方面應該完全相同。事實上,有幾個實現是通過調用另一種方法來實現的。
添加回答
舉報
0/150
提交
取消