目前为止,RocketMQ仅仅支持经过TAG
来过滤消息,可是一个消息只能有一个TAG
,这个对于复杂需求来讲太过于限制了。所以,咱们但愿基于SQL 92表达式语法的子集定义和实现一种合理的筛选语言,以支持自定义消息筛选。设计
让RocketMQ具有消息过滤的能力是这个问题的目的,咱们知道SQL92被普遍使用,大多数人都熟悉它。所以选择它做为RocketMQ的语法是合理的。code
据我所知,ActiveMQ已经在基于JavaCC的基础上实现了这个功能,它很简单,而且是可执行的。因此我只是提取它的一些语法并集成到RocketMQ中。class
>
,>=
,<
,<=
,BETWEEN
,=
.=
,<>
,IN
.IS NULL
或则 IS NOT NULL
.AND
, 逻辑OR
, 逻辑NOT
.常数类型:基础
NULL
,特别的常量。TRUE
,FALSE
。