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
中使用选择器时,不满足选择器表达式的消息将不会传递到 QueueReceiver
。 QueueReciever
将继续读取所有满足选择器表达式的消息。
我相信您的输出包含 3 - 10 之间的数字。.这是预期的行为。请参阅 createReceiver 方法的文档。
在 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
中使用选择器时,不满足选择器表达式的消息将不会传递到 QueueReceiver
。 QueueReciever
将继续读取所有满足选择器表达式的消息。
我相信您的输出包含 3 - 10 之间的数字。.这是预期的行为。请参阅 createReceiver 方法的文档。