JMS 选择器奇怪的行为

JMS selector strange behaviour

在 JMS 中考虑以下伪代码:

发件人:

    QueueSender qs = session.createSender(queue);
    int i = 0;
    while(i < 10)
    {   
        TextMessage msg = session.createTextMessage();
        msg.setText(""+i);

         msg.setIntProperty("value", i);

        qs.send(msg);
        i++;
    }

接收者:

String sel = "value >2";
QueueReceiver qr = session.createReceiver(q,sel);

while(true)
{
 TextMessage tm = (TextMessage) qr.receive();
 System.out.println(tm.getText);
}

我原以为消费者不会consume/print任何事情,因为他感兴趣的消息被消息 0、1、2 阻止了,这些消息没有被任何消费者拉取。

我看到的是消费者打印出其选择器选择的所有消息...

这是 JMS 的正确行为吗?
这在某处记录了吗?

谢谢。

I would have expected the consumer not to consume/print anything becauses the messages he is interested at are blocked by the messages 0,1,2 that are not being pulled by any consumer

这个假设是不正确的。当您在 JMS 中使用选择器时,不满足选择器表达式的消息将不会传递到 QueueReceiverQueueReciever 将继续读取所有满足选择器表达式的消息。

我相信您的输出包含 3 - 10 之间的数字。.这是预期的行为。请参阅 createReceiver 方法的文档。