HornetQ提供了一套强大的过滤器(filter)语言。它的语法是基于SQL 92表达式的部分语法。
实际上它与JMS选择器(selector)的语法是相同的。只是其中有一些预定义的标识符有所不同。有关 JMS选择器的相关知识参见 javax.jms.Message。
HornetQ在以下以个地方使用了过滤器表达式:
预定义的队列。当在hornetq-configuration.xml 或 hornetq-jms.xml定义 队列时,可以使用过滤器。只有与过滤器表达式相匹配的消息才能达到该队列中。
核心桥可以使用可选的过滤器表达式。只有与表达式相匹配的消息才被桥处理。 参见(Chapter 36, 核心桥)。
转移(Divert)也可以使用可选的过滤器表达式。只有与表达式匹配的消息才被转移。 参见(Chapter 35, 消息的转发(divert)与分流)。
另外过滤器还可以在编程方式创建接收者(consumer)和队列时使用。还有一些应用过滤器的地方在 Chapter 30, 管理中有所描述。
HornetQ的内核过滤器表达式与JMS选择器表达式是有所不同的。JMS选择器应用于JMS消息,而HornetQ的内核过滤 器表达式则用于内核消息。
以下标识符可以用在内核消息的过滤器表达式中,用来引用内核消息的属性:
HQPriority。代表消息的优先级。消息优先级属性的有效值为0到9间的整数。 0为最低优先级,9为最高优先级。例:HQPriority = 3 AND animal = 'aardvark'。
HQExpiration。代表消息的失效时间。其值为一长整形数。
HQDurable。代表消息是否是持久消息。它是一个字符型的属性,有效值为 DURABLE 或 NON_DURABLE。
HQTimestamp。代表消息的创建时间,其值为一长整形数。
HQSize。消息的大小。单位为字节。其值是一个整形数。
任何其它的标识符在内核过滤器的表达式中都认为是代表着该消息的一个属性。