具有receiveNoWait()的消息选择器

时间:2019-03-06 12:36:03

标签: java jms selector ibm-mq

对于同步过程,消息选择器也将与receiveNowait()方法一起使用。它与receive()方法一起使用,但想知道IBM mq的receiveNoWait。 创建使用者时添加了消息选择器。

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

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

这意味着,接收方仅需要接收比当前时间早3分钟的消息。 任何人都可以找出问题所在。

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

我不能具体地讲IBM MQ实现,但是从JMS角度来看,JMS规范中没有任何限制receiveNoWait的选择器的使用,因此我希望它可以在任何兼容的实现中使用。

答案 2 :(得分:0)

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