簡體   English   中英

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);
}

我本來希望使用者不會消耗/打印任何東西,因為他感興趣的消息被消息0,1,2阻止了,而消息0,1,2沒有被任何使用者拉出。

相反,我看到的是消費者打印出其選擇器選擇的所有消息...

這是JMS的正確行為嗎?
那是記錄在某處嗎?

謝謝。

我本來希望使用者不會消耗/打印任何東西,因為他感興趣的消息被消息0,1,2阻止,而這些消息並未被任何使用者拉出

這個假設是不正確的。 JMS使用選擇器時,不滿足選擇器表達式的消息將不會傳遞到QueueReceiver QueueReciever將繼續讀取所有滿足選擇器表達式的消息。

我相信您的輸出包含3到10之間的數字。 這是預期的行為。 請參閱文檔以了解createReceiver方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM