第15章 フィルター式とメッセージセレクター

JBoss EAP の messaging-activemq サブシステムでは、SQL 92 表現構文のサブセットに基づいた強力なフィルター言語が提供されます。

これは JMS セレクターで使用される構文と同じですが、事前定義識別子は異なります。JMS セレクター構文に関するドキュメントは、javax.jms.Message のインターフェース Javadoc を参照してください。

filter 属性は、設定内の複数の場所に置かれます。

  • 事前定義されたキュー。キューを事前定義する場合、キューに対してフィルター式で定義できます。フィルター式に一致するメッセージのみがキューに格納されます。次の設定スニペットは、フィルターが含まれるキュー定義を示しています。

    <subsystem xmlns="urn:jboss:domain:messaging-activemq:4.0">
      ...
      <queue
        name="myQueue"
        filter="FILTER_EXPRESSION"
        ...
      />
      ...
    </subsystem>

    管理 CLI でセレクターを使用してキューを作成するには、以下のようなコマンドを使用します。

    jms-queue add --queue-address=QUEUE_ADDRESS --selector=FILTER_EXPRESSION
  • コアブリッジはオプションのフィルター式で定義でき、一致するメッセージのみがブリッジされます。以下は、messaging-activemq サブシステムにフィルターを持つブリッジが含まれる設定ファイルの例になります。

    <subsystem xmlns="urn:jboss:domain:messaging-activemq:4.0">
      ...
      <bridge
        name="myBridge"
        filter="FILTER_EXPRESSION"
        ...
      />
      ...
    </subsystem>
  • 迂回はオプションのフィルター式で定義でき、一致するメッセージのみが迂回されます。詳細は、「迂回」を参照してください。以下のスニペット例は、フィルターを使用した迂回を示しています。

    <subsystem xmlns="urn:jboss:domain:messaging-activemq:4.0">
      ...
      <divert
        name="myDivert"
        filter="FILTER_EXPRESSION"
        ...
      />
      ...
    </subsystem>

JMS セレクター式と JBoss EAP メッセージングのコアフィルター式にはいくつかの違いがあります。JMS セレクター式は JMS メッセージで動作しますが、JBoss EAP メッセージングのコアフィルター式はコアメッセージで動作します。

以下の識別子をコアフィルター式で使用することで、コアメッセージの属性を参照できます。

  • AMQPriority。メッセージの優先度を参照します。メッセージの優先度は、0 - 9 の有効な値を持つ整数です。0 の優先度が最も低く、9 が最も高くなります。たとえば、AMQPriority = 3 AND animal = 'aardvark' のようになります。
  • AMQExpiration。メッセージの有効期限を参照します。値は長整数です。
  • AMQDurable。メッセージが永続的であるどうかを参照します。値は、DURABLE または NON_DURABLE という有効な値を持つ文字列です。
  • AMQTimestamp。メッセージが作成された時点のタイムスタンプです。値は長整数です。
  • AMQSize。メッセージのサイズ (バイト単位)。値は整数です。

コアフィルター式で使用される他の識別子はメッセージのプロパティーであると考えられます。