(5)Artemis支持SQL过滤

   Artemis支持基于SQL 92子集语法的过滤表达式。与JMS选择器类似,但是预定义标识符不同。过滤语法使用在如下几个地方:

  • 预定义队列,在预定义队列时可以在core或者jms的broker.xml中为队列定义过滤表达式。只有与表达式匹配的消息才能进入队列。
  • 使用可选的过滤器定义core桥接器,仅桥接匹配的消息。
  • 使用可选的过滤器定义转移,仅转移匹配的消息。
  • 在创建消费者、队列和在管理记录多个地方可以用编程方式使用过滤器。

    在使用core协议的过滤表达式中可以使用以下标识符属性值:

  • AMQPriority,用于消息优先级,例如AMQPriority=3 AND animal='aardvark'
  • AMQExpiration,用于消息过期时间,值是一个长整型
  • AMQDurable,用于消息是否是持久化,有效值为:DURABLE或NON_DURABLE
  • AMQTimestamp,用于消息创建的时间戳,值为一个长整型
  • AMQSize:用于指定消息大小(单位bytes),值为一个整型

    在JMS规范中,不能将String属性值转换为数字。例如,如果消息中age属性值为String 21,则不会匹配这个规则:age>18。但是呢Artemis的STOMP客户端值只能发送字符串属性的消息,这样的限制就限制了过滤功能。如果希望过滤器表达式自动把String属性转换为数字类型,只需用convert_string_expressions:作为前置,如:convert_string_expressions:age>18。

    JMS规范中规定属性标识符为:无限长度的字母和数字序列,第一个必须是字母。字母是任何能通过字符方法Character.isJavaLetter调用后能返回true,包括_和$。则字母或数字是任何Character.isJavaLetterOrDigit方法返回true的任何值。此约束意味着不能使用连接符(-),如果要使用需要加上hyphenated_props:前缀,如:hyphenated_props:foo-bar=0。

 

注:此系列文章为Apache Artemis V2.6.2官方使用文档的简要翻译文档(非完全按照官方文档排版进行翻译,有删减),个人能力有限如有错误请谅解。源文档地址:http://activemq.apache.org/artemis/docs/latest/index.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值