클라이언트는 Message Selector 설정을 통해 일정한 조건을 충족하는 메시지만을 수신받을 수 있다. Message Selector는 Destination에 있는 메시지들 중에서 기준에 부합되는 메시지를 선별하여 수신할 수 있도록 필터링 역할을 한다. 메시지의 프로퍼티에 설정된 값과 Message Selector에서 설정한 조건을 비교한다. 비교 대상은 프로퍼티만 가능하며 주요 컨텐츠를 저장하는 Body의 값은 비교하지 않는다.
Message Selector의 문법은 SQL92의 표현식 중 일부분을 준수한다. Message Selector를 평가하는 순서는 왼쪽에서 오른쪽으로 진행하며 괄호를 사용하여 순서를 변경할 수 있다. Message Selector는 Literal과 식별자, 그리고 표현식으로 구성된다.
Literal
작은따옴표로 둘러싸인 문자열 (예: 'cat' )
long 또는 double 범위 이내의 수치 문자열 (예: 50, 1.414)
식별자
프로퍼티의 Name에 해당한다. 뒤따르는 literal은 프로퍼티의 타입과 일치해야 한다. 일치하지 않을 경우 해당 프로퍼티의 평가는 False가 될 것이다. 또한 메시지에 해당 프로퍼티가 존재하지 않는다면 값은 NULL로 평가된다.
식별자는 표현식 또는 literal을 사용해서는 안 된다. 또한 대소문자를 구별한다.
식별자로 일부 예약된 프로퍼티는 사용할 수 없다. 예약된 프로퍼티의 종류는 “1.3.4. 메시지”를 참고한다.
식별자로 Message Selector에서 사용하는 문법의 키워드는 사용할 수 없다.
표현식
다음의 비교 연산자, 논리 연산자, 수치 연산자 등을 사용하여 조건 표현식을 사용할 수 있다.
구분 | 설명 |
---|---|
비교 연산자 | =, >, >=, <, <=, <> |
논리 연산자 | NOT, AND, OR |
수치 연산자 | +, - (단항연산), *, /, +, - (우선순위는 +, - (단항연산) > *, / > +, - 순) |
조건 표현식
표현식1 [NOT] BETWEEN 표현식2 AND 표현식3
"weight BETWEEN 50 AND 70"는 "weight >= 50 AND weight <= 70" 과 같다.
"weight NOT BETWEEN 50 AND 70"는 "weight < 50 OR weight > 70" 과 같다.
식별자 [NOT] IN (literal1, literal2, …)
"type IN ('cat', 'tiger', 'puma')"는 "type = 'cat' OR type = 'tiger' OR type = 'puma'" 와 같다.
"type NOT IN (20, 30, 40)"은 "type <> 20 AND type <> 30 AND type <> 40" 과 같다.
식별자 [NOT] LIKE 패턴
패턴은 물음표(?), 애스터리스크(*) 문자를 사용할 수 있으며, 물음표(?) 문자는 해당 위치에 어떤 문자든지 반드시 한 문자가 있어야 참이 되며, 애스터리스크(*) 문자는 해당 위치에 0개 이상의 어떤 문자열이든지 올 수 있음을 의미한다.
"year LIKE '200?' "는 '2009'는 참이지만 '200' 이나 '20001'은 거짓이 된다.
"year LIKE '200*' "는 '200' 으로 시작하는 모든 문자열들이 참이 된다.
다음은 Message Selector를 사용하는 예제이다.
"Type = 'cat' AND Weight BETWEEN 5 AND 15"
Type = 'cat' 이 참이고 Weight BETWEEN 5 AND 15( "weight >= 5 그리고 weight <= 15" )가 참이면 해당 Message Selector 문은 참이 된다.