第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 サーバーのアドレスに転送します。