Message Selector 사용법

클라이언트는 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을 사용해서는 안 된다. 또한 대소문자를 구별한다.

    • 식별자로 일부 예약된 프로퍼티는 사용할 수 없다. 예약된 프로퍼티의 종류는 Message를 참고한다.

    • 식별자로 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 문은 참이 된다.