[英]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);
}
我本來希望使用者不會消耗/打印任何東西,因為他感興趣的消息被消息0,1,2阻止了,而消息0,1,2沒有被任何使用者拉出。
相反,我看到的是消費者打印出其選擇器選擇的所有消息...
這是JMS的正確行為嗎?
那是記錄在某處嗎?
謝謝。
我本來希望使用者不會消耗/打印任何東西,因為他感興趣的消息被消息0,1,2阻止,而這些消息並未被任何使用者拉出
這個假設是不正確的。 在JMS
使用選擇器時,不滿足選擇器表達式的消息將不會傳遞到QueueReceiver
。 QueueReciever
將繼續讀取所有滿足選擇器表達式的消息。
我相信您的輸出包含3到10之間的數字。 這是預期的行為。 請參閱文檔以了解createReceiver方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.