第23章 迂回

迂回は、JBoss EAP メッセージングで設定されるオブジェクトです。メッセージをあるアドレスから別のアドレスに迂回する場合に役に立ちます。迂回は、以下のタイプに分類できます。

特別な迂回
メッセージは新しいアドレスにのみ迂回され、古いアドレスには送信されません。
特別でない迂回
メッセージは古いアドレスに送信され、そのコピーが新しいアドレスにも送信されます。特別でない迂回はメッセージのフローを分割するために使用できます。

迂回により、メッセージは同じサーバー内のアドレスにのみ迂回されます。別のサーバーのアドレスにメッセージを迂回する必要がある場合、一般的なパターンでは、メッセージをローカルストアと転送キューに迂回し、そのキューから消費して別のサーバーのアドレスに転送するブリッジをセットアップします。

そのため、迂回は非常に高度な概念です。ブリッジと組み合わせると、迂回は興味深く複雑なルーティングを作成するのに使用することができます。サーバーの迂回のセットは、一種のメッセージのルーティングテーブルと考えることができます。迂回とブリッジを組み合わせると、複数の地理的に分散したサーバー間に、信頼性の高いルーティング接続の分散ネットワークを作成し、グローバルなメッセージジング網が作成できます。ブリッジの使用方法についての詳細は、「コアブリッジの設定」を参照してください。

迂回は、トランスフォーマーとオプションのメッセージフィルターを適用するように設定できます。オプションのメッセージフィルターは、指定されたフィルターに一致するメッセージのみを迂回するのに役立ちます。フィルターの詳細は、「フィルター式とメッセージセレクター」を参照してください。

トランスフォーマーは、メッセージを別のフォームに変換するために使用されます。トランスフォーマーが指定されている場合、迂回されたメッセージはすべてトランスフォーマーによって変換されます。すべてのトランスフォーマーは org.apache.activemq.artemis.core.server.cluster.Transformer インターフェースを実装する必要があります。

package org.apache.activemq.artemis.core.server.cluster;
import org.apache.activemq.artemis.core.server.ServerMessage;

public interface Transformer {
   ServerMessage transform(ServerMessage message);
}

JBoss EAP メッセージングを有効にしてトランスフォーマー実装のインスタンスをインスタンス化できるようにするには、JBoss EAP モジュールにその実装を追加し、そのモジュールをエクスポートされた依存関係として org.apache.activemq.artemis モジュールに追加する必要があります。カスタムモジュールの作成方法の詳細は、JBoss EAP『設定ガイド』の「カスタムモジュールの作成」を参照してください。org.apache.activemq.artemis モジュールに依存関係を追加するには、以下の例のように EAP_HOME/modules/system/layers/base/org/apache/activemq/artemis/main/module.xml ファイルをテキストエディターで開いて <module><dependencies> のリストに追加します。

<module xmlns="urn:jboss:module:1.3" name="org.apache.activemq.artemis">
    <resources>
      ...
    </resources>
    <dependencies>
      ...
      <module name="YOUR_MODULE_NAME" export="true"/>
    </dependencies>
</module>

23.1. 特別な迂回

以下の例は、設定で見られる可能性がある特別な迂回を示しています。

<divert
  name="prices-divert"
  address="jms.topic.priceUpdates"
  forwarding-address="jms.queue.priceForwarding"
  filter="office='New York'"
  transformer-class-name="org.apache.activemq.artemis.jms.example.AddForwardingTimeTransformer"
  exclusive="true"/>

この例では、prices-divert と呼ばれる迂回が、アドレス jms.topic.priceUpdates に送信されたメッセージを迂回するように設定されています。これは priceUpdates という JMS トピックに送信されたすべてのメッセージを、priceForwarding というローカル JMS キューに対応する別のローカルアドレス jms.queue.priceForwarding にマッピングしています。

また、値が New York のメッセージプロパティー office を持つメッセージのみを迂回するようにメッセージフィルター文字列を指定します。その他のメッセージはすべて、今までどおり通常のアドレスへルーティングされます。フィルター文字列はオプションです。指定されていない場合は、すべてのメッセージが一致したとみなされます。

トランスフォーマークラスが指定されていることに注意してください。この例では、トランスフォーマーは迂回が発生した時間を記録するヘッダーを追加するだけです。

この例では、実際にメッセージをローカルストアと転送キューに迂回しています。これは、メッセージを別のサーバーのアドレスに転送するブリッジで設定されています。詳細は、「コアブリッジの設定」を参照してください。