带有 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 查询相同的问题) .
对于同步进程,消息选择器是否也可以使用 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 查询相同的问题) .