【发布时间】:2015-07-13 00:10:27
【问题描述】:
在 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);
}
我原以为消费者不会消费/打印任何东西,因为他感兴趣的消息被消息 0、1、2 阻止,而这些消息没有被任何消费者拉取。
我看到的是消费者打印出其选择器选择的所有消息...
这是 JMS 的正确行为吗?
那是在某处记录的吗?
谢谢。
【问题讨论】:
-
什么是
qs?你能说明它是如何被初始化的吗? -
尝试将
value >2更改为value>2以确保它不是解析错误。 -
还是一样的输出
-
至此,不得不说,输出如预期。选择器不会阻止其他消息被读取。它只会导致侦听器忽略这些消息并继续其余的。您可以将接收者打印的输出添加为问题的一部分吗?查看我的回答,如果您有任何疑问,请告诉我。