过滤消息的两种方式
過濾消息
在大多數(shù)情況下,TAG是一個簡單而有用的設(shè)計,其可以來選擇您想要的消息。例如:
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("CID_EXAMPLE"); consumer.subscribe("TOPIC", "TAGA || TAGB || TAGC");消費者將接收包含TAGA或TAGB或TAGC的消息。但是限制是一個消息只能有一個標(biāo)簽,這對于復(fù)雜的場景可能不起作用。在這種情況下,可以使用SQL表達式篩選消息。SQL特性可以通過發(fā)送消息時的屬性來進行計算。在RocketMQ定義的語法下,可以實現(xiàn)一些簡單的邏輯。下面是一個例子:
------------ | message | |----------| a > 5 AND b = 'abc' | a = 10 | --------------------> Gotten | b = 'abc'| | c = true | ------------ ------------ | message | |----------| a > 5 AND b = 'abc' | a = 1 | --------------------> Missed | b = 'abc'| | c = true | ------------SQL基本語法
RocketMQ只定義了一些基本語法來支持這個特性。你也可以很容易地擴展它。
-
數(shù)值比較,比如:>,>=,<,<=,BETWEEN,=;
-
字符比較,比如:=,<>,IN;
-
IS NULL 或者 IS NOT NULL;
-
邏輯符號 AND,OR,NOT;
常量支持類型為:
-
數(shù)值,比如:123,3.1415;
-
字符,比如:'abc',必須用單引號包裹起來;
-
NULL,特殊的常量
-
布爾值,TRUE 或 FALSE
只有使用push模式的消費者才能用使用SQL92標(biāo)準(zhǔn)的sql語句,接口如下:
public void subscribe(finalString topic, final MessageSelector messageSelector)?
總結(jié)