RocketMQ中使用SQL92过滤消息

目前为止,RocketMQ仅仅支持经过TAG来过滤消息,可是一个消息只能有一个TAG,这个对于复杂需求来讲太过于限制了。所以,咱们但愿基于SQL 92表达式语法的子集定义和实现一种合理的筛选语言,以支持自定义消息筛选。设计

为何是SQL92的子集?

让RocketMQ具有消息过滤的能力是这个问题的目的,咱们知道SQL92被普遍使用,大多数人都熟悉它。所以选择它做为RocketMQ的语法是合理的。code

据我所知,ActiveMQ已经在基于JavaCC的基础上实现了这个功能,它很简单,而且是可执行的。因此我只是提取它的一些语法并集成到RocketMQ中。class

  1. 数字表达式: >,>=,<,<=,BETWEEN,=.
  2. 字符表达式:=,<>,IN.
  3. IS NULL 或则 IS NOT NULL.
  4. 逻辑AND, 逻辑OR, 逻辑NOT.

常数类型:基础

  1. 数字:3.1415926, 5。
  2. 字符: ‘a’,必须带有单引号。
  3. NULL,特别的常量。
  4. 布尔类型: TRUEFALSE

设计

相关文章
相关标签/搜索