带有 receiveNoWait() 的消息选择器

Message selector with receiveNoWait()

对于同步进程,消息选择器是否也可以使用 receiveNowait() 方法。它适用于 receive() 方法,但想知道 IBM mq 的 receiveNoWait。 创建消费者时添加了消息选择器。

编辑 1: 我已经用 receiveNowait() 方法进行了测试,但选择器不工作。我不知道问题出在我的选择器或 receivenowait 方法上。以下是我使用的选择器:

String messageSelector = "JMSTimestamp <= " + System.currentTimeMillis() - 180000;
 receiver = (MessageConsumer) session.createConsumer(replyQueue, messageSelector);

也就是说,接收者只需要接收比当前时间早3分钟的消息。 任何人都可以找出问题所在。

编辑 2: 完成测试后,我发现问题出在选择器上,JMSTimeStamp 在选择器表达式中的正确用法是什么?

我不能具体谈论 IBM MQ 实现,但从 JMS 的角度来看,JMS 规范中没有任何内容限制使用 receiveNoWait 选择器,因此我希望它能在任何兼容的环境中工作实施。

receive()、receive(long timeout) 和 receiveNoWait() 在交付内容方面应该完全相同。事实上,有几个实现通过调用另一个方法来实现一个。

pepared 选择器为 运行 时 system.currnetTimeMillis() 值不会更新。

此处您在初始化选择器时修复了“当前”时间戳。 您应该为您的查询执行类似“endValidityDate <= (JMSTimestamp-24601000)”的查询(与任何具有固定值而不是动态值的 SQL 查询相同的问题) .