ActiveMQ 5.5 と JMS を使用しています。のメッセージセレクターを持つトピックコンシューマーを作成しました
key<>'aValue'
つまり、消費者は、値「aValue」を持たない「key」というプロパティを持つメッセージのみを受信します。
次に、「キー」というプロパティのないメッセージを送信します (null 値のプロパティがある場合ではなく、プロパティがないことに注意してください)。
私を困惑させているのは、メッセージが配信されているということです。
これは、演算子 NOT LIKE を使用する場合には当てはまりません:
key NOT LIKE 'aVal%'.
この場合、コンシューマーはメッセージを受け取りません。これは私の中で矛盾しています。
これは、JMS 仕様に次のように記載されています。
メッセージ セレクターは、メッセージのヘッダー フィールドとプロパティ値がセレクター内の対応する識別子に置き換えられたときに、セレクターが true と評価されたときにメッセージと一致します。
SQL92 仕様 (JMS メッセージ セレクターの構文が基づいている) によると、何かを NULL と比較すると、値 (この場合は TRUE または FALSE) ではなく NULL になります。この場合、最初のケースでメッセージが受信されることはありません。
誰もこれに出くわしましたか?プロデューサーがプロパティを指定せず、コンシューマーがセレクターを持っている場合、<> の場合と NOT LIKE の場合のどちらの結果が正しいですか? これを回避する方法はありますか?