Properties jms消息选择器
我正在使用ActiveMQ5.5和JMS。我创建了一个主题消费者,其消息选择器为Properties jms消息选择器,properties,jms,activemq,Properties,Jms,Activemq,我正在使用ActiveMQ5.5和JMS。我创建了一个主题消费者,其消息选择器为 key<>'aValue' 在这种情况下,消费者不会收到消息。这在我看来是前后矛盾的 这就是JMS规范所说的: 当消息的标题字段和属性值被替换为选择器中相应的标识符时,消息选择器将在选择器的计算结果为true时匹配消息 根据SQL92规范(JMS消息选择器语法所基于的规范),将任何内容与NULL进行比较会得到NULL,而不是值(本例中为TRUE或FALSE)。如果是这种情况,则第一种情况不应导致收到消
key<>'aValue'
在这种情况下,消费者不会收到消息。这在我看来是前后矛盾的
这就是JMS规范所说的:
当消息的标题字段和属性值被替换为选择器中相应的标识符时,消息选择器将在选择器的计算结果为true时匹配消息
根据SQL92规范(JMS消息选择器语法所基于的规范),将任何内容与NULL进行比较会得到NULL,而不是值(本例中为TRUE或FALSE)。如果是这种情况,则第一种情况不应导致收到消息
有人见过这个吗?当生产者未指定属性且消费者有选择器时,哪种结果(案例或不相似案例)是正确的?有什么想法可以解决这个问题吗?基于我有限的阅读,我的理解是,首先是从JMS规范: 如果引用了消息中不存在的属性,则其 值为空 因此,在您的情况下,当替换属性值时,键标识符的计算结果将为NULL 第一个表达式本质上是空的“aValue”,这在我心目中是正确的 第二个表达式将为NULL,不像规范所说的“%aVal”有未知的结果,ActiveMQ似乎以true作为结果: 如果相似或不相似操作的标识符为NULL,则 操作未知 我认为解决办法是使选择器非常明确:
(key NOT NULL) AND ...
谢谢你的回答。我还将与其他JMS代理一起测试这一点,看看在解释上是否存在差异。您建议的解决方案不适用于ActiveMQ。它抛出一个异常。等我有空的时候,我会把它加在这里
(key NOT NULL) AND ...