第33章 メッセージフローの迂回と分割

迂回は、あるアドレスにルーティングされたメッセージを他のアドレスに透過的に迂回するオブジェクトです (クライアントアプリケーションロジックには変更を加えません)。
迂回は 特別 (メッセージが新しいアドレスに迂回されますが、以前のアドレスには送信されません) または 特別でない (メッセージのコピーが新しいアドレスに送信され、元のメッセージが古いアドレスに送信されます) のいずれかです。したがって、特別でない迂回は、メッセージフローを分割するために使用できます (たとえば、注文キューに送信された各注文を監視する必要がある場合)。
迂回はフィルターで設定することもでき、フィルターに一致するメッセージのみが迂回されます。
迂回は Transformer を適用するために設定することもできます。指定された場合、迂回されたすべてのメッセージをこの Transformer により変換できます。
迂回は同じサーバーでメッセージをアドレスに移動しますが、ブリッジと組み合わせて使用すると、より複雑なルーティングを設定できます。異なるサーバーに「迂回」させる一般的な使用例の 1 つはメッセージをローカルストアに迂回し、キューを転送して、そのキューから消費するブリッジを設定し、消費されたメッセージを別のサーバーのアドレスに転送することです。サーバーの迂回はメッセージのルーティングテーブルと考えることができます。迂回とブリッジを組み合わせると、地理的に分散された複数のサーバー間で信頼できるルーティング接続の分散ネットワークを作成できます。
迂回は JBOSS_DIST/jboss-as/server/PROFILE/deploy/hornetq/hornetq-configuration.xml ファイルで定義されます。ファイルにはゼロ個以上の迂回を定義できます。

33.1. 特別な迂回

特別な迂回は古いアドレスにルーティングされたすべての一致メッセージを新しいアドレスに迂回します。一致メッセージは古いアドレスにルーティングされません。
迂回は以下のディレクティブを使用して JBOSS_DIST/jboss-as/server/PROFILE/deploy/hornetq/hornetq-configuration.xml で定義されます。
<divert name="prices-divert">                  
   <address>jms.topic.priceUpdates</address>
   <forwarding-address>jms.queue.priceForwarding</forwarding-address>    
   <filter string="office='New York'"/>
   <transformer-class-name>
    org.hornetq.jms.example.AddForwardingTimeTransformer
   </transformer-class-name>     
   <exclusive>true</exclusive>
</divert>
上記で指定された prices-divert 迂回はアドレス jms.topic.priceUpdates (priceUpdates という名前のローカル JMS トピック) に送信されたすべてのメッセージを別のローカルアドレス jms.queue.priceForwarding (priceForwarding という名前のローカル JMS キュー) に迂回します。
メッセージプロパティ office='New York' を持つメッセージだけが迂回されるよう フィルター文字列 が指定されます。他のすべてのメッセージは通常のアドレスにルーティングされ続けます。フィルター文字列はオプションです。指定されない場合は、すべてのメッセージが迂回されます。
トランスフォーマークラスもオプションです。指定されると、一致する各メッセージに対して変換が実行されます。これにより、メッセージが迂回される前にメッセージボディーまたはプロパティーを変更できます。上記の例では、迂回が発生した時間を記録するヘッダーを追加するために変換を使用します。
全体として、上記の例では、ブリッジで設定されるメッセージをローカルストアおよび転送キューに迂回し、メッセージを別の HornetQ サーバーのアドレスに転送します。