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

設計

相關文章
相關標籤/搜索