我正在使用 ActiveMQ 5.5 和 JMS。我创建了一个带有消息选择器的主题消费者
key<>'aValue'
这意味着消费者将仅接收具有名为“key”的属性且不具有值“aValue”的消息。
然后我发送一条没有名为“key”的属性的消息(请注意,这种情况不是存在具有空值的属性,而是没有属性。)
令我困惑的是,消息已传递。
如果我使用运算符 NOT LIKE,情况并非如此:
key NOT LIKE 'aVal%'.
在这种情况下,消费者不会收到消息。这在我看来是不一致的。
这就是 JMS 规范所说的:
A message selector matches a message when the selector evaluates to true when the message's header field and property values are substituted for their corresponding identifiers in the selector.
根据 SQL92 规范(JMS 消息选择器语法基于该规范),将任何内容与 NULL 进行比较会导致 NULL 而不是值(在这种情况下为 TRUE 或 FALSE)。如果是这种情况,则第一种情况不应导致接收到消息。
有人遇到过这个吗?当生产者没有指定属性而消费者有选择器时,<> 情况或 NOT LIKE 情况哪个结果是正确的?有什么想法可以解决这个问题吗?