对于同步过程,消息选择器也将与receiveNowait()方法一起使用。它与receive()方法一起使用,但想知道IBM mq的receiveNoWait。 创建使用者时添加了消息选择器。
编辑1: 我已经用receiveNowait()方法进行了测试,选择器不起作用。我不知道问题出在我的选择器或receivenowait方法上。以下是我使用的选择器:
String messageSelector = "JMSTimestamp <= " + System.currentTimeMillis() - 180000;
receiver = (MessageConsumer) session.createConsumer(replyQueue, messageSelector);
这意味着,接收方仅需要接收比当前时间早3分钟的消息。 任何人都可以找出问题所在。
编辑2: 在完成测试之后,我发现选择器存在问题,选择器表达式中JMSTimeStamp的正确用法是什么?
答案 0 :(得分:1)
pepared system.currnetTimeMillis() 值在选择器运行时不会更新。
在这里,您将在初始化选择器时修复“当前”时间戳。 您应该为您的查询执行类似“endValidityDate <= (JMSTimestamp-24601000)”的查询(与使用固定值而不是动态值的任何 SQL 查询相同的问题)。
答案 1 :(得分:0)
我不能具体地讲IBM MQ实现,但是从JMS角度来看,JMS规范中没有任何限制receiveNoWait
的选择器的使用,因此我希望它可以在任何兼容的实现中使用。
答案 2 :(得分:0)
receive(),receive(long timeout)和receiveNoWait()在交付内容方面应该完全相同。实际上,有几种实现是通过调用另一种方法来实现的。