选择器
JMS 选择器
选择器是一种将过滤器附加到订阅以执行基于内容的路由的方式。选择器使用 SQL 92 语法定义,通常应用于消息头;无论是 JMS 消息上可用的标准属性,还是您可以通过 JMS 代码添加的自定义头。
这是一个示例
JMSType = 'car' AND color = 'blue' AND weight > 2500
有关选择器详细信息的更多文档,请参见 javax.jmx.Message 上的参考。
ActiveMQ Classic 支持一些 JMS 定义的属性,以及一些 ActiveMQ Classic 属性(请参见 消息属性),选择器可以使用这些属性。
使用 XPath 过滤消息
Apache ActiveMQ Classic 在处理包含 XML 主体的消息时也支持基于 XPath 的选择器。要使用 XPath 选择器,请使用以下语法
XPATH '//title\[@lang=''eng''\]'
Xalan 依赖项
XPath 支持需要 Xalan,它不是分发的一部分。Xalan jar 需要手动添加到 lib 目录或通过 maven 拉入您的应用程序
<dependency>
<groupId>xalan</groupId>
<artifactId>xalan</artifactId>
<version>2.6.0</version>
</dependency>
字符串属性转换/针对 STOMP 消息的选择
JMS 规范指出,字符串属性在选择器中使用时不应该转换为数字。例如,如果一条消息的“age”属性设置为字符串“21”,那么以下选择器不应与其匹配:“age > 18”。由于 ActiveMQ Classic 支持 STOMP 客户端,它只能发送带有字符串属性的消息,因此该限制有些限制。如果您希望您的 JMS 选择器自动将字符串属性转换为相应的数字类型,只需在选择器前加上“convert_string_expressions:”。如果将上一个示例中的选择器更改为“convert_string_expressions:age > 18”,那么它将匹配该消息。