我是使用ActiveMQ 5.5和JMS。我创建了一个具有消息选择器的主题消费者
key<>'aValue'
这意味着用户只会收到没有属性值为“aValue”的“key”属性的消息。
然后,我发送一条没有名为“key”的属性的消息(请注意,情况不是存在一个空值属性,而是根本没有该属性。)
让我困惑的是,消息被传送了。
如果我使用运算符NOT LIKE,则情况就不同了:
key NOT LIKE 'aVal%'.
在这种情况下,消费者没有收到消息。在我的看法中,这是不一致的。
以下是JMS规范的说明:
消息选择器匹配消息时,当消息头字段和属性值替换为选择器中对应的标识符时,选择器求值为true。
根据SQL92规范(JMS消息选择器语法基于此),将任何内容与NULL进行比较会导致结果为NULL而不是一个值(在本例中为TRUE或FALSE)。如果是这种情况,第一种情况不应该导致消息被接收。
有人遇到过这种情况吗?当生产者未指定属性,消费者具有选择器时,哪个结果,即<>还是NOT LIKE,是正确的?有什么办法可以解决这个问题?