20.7. 迂回

Diverts は、HornetQ で設定されるオブジェクトです。メッセージをあるアドレス (メッセージのルーティング先) から別のアドレスに迂回する場合に役に立ちます。Diverts は、サーバー設定ファイル (standalone.xml および domain.xml) で設定できます。
迂回は、以下のタイプに分類できます。
  • 特別な迂回: メッセージは新しいアドレスにのみ迂回され、古いアドレスには送信されません
  • 特別でない迂回: メッセージは古いアドレスに引き続き送信され、メッセージのコピーが新しいアドレスに送信されます。特別でない迂回はメッセージのフローを分割するために使用できます。
迂回は Transformer とオプションのメッセージフィルターを適用するよう設定できます。オプションのメッセージフィルターを使用すると、指定したフィルターに一致するメッセージのみを迂回できます。トランスフォーマーは、メッセージを別の形式に変換するために使用されます。トランスフォーマーが指定された場合は、迂回されたすべてのメッセージが Transformer によって変換されます。
迂回により、メッセージは同じサーバー内のアドレスにのみ迂回されます。別のサーバーのアドレスにメッセージを迂回する必要がある場合は、以下に示されたパターンに従ってください。
  • メッセージをローカルストアと転送キューに迂回します。そのキューから消費し、メッセージを別のサーバーのアドレスに迂回するブリッジをセットアップします
迂回とブリッジを組み合わせてさまざまなルーティングを作成できます。

20.7.1. 特別な迂回

特別な迂回により、すべてのメッセージが古いアドレスから新しいアドレスに迂回します。一致するメッセージは古いアドレスにルーティングされません。特別な迂回は、standalone.xml および domain.xml サーバー設定ファイルで exclusive 属性を true に設定することにより有効にできます。
以下の例は、サーバー設定ファイルで設定された特別な迂回を示しています。
<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>
以下のリストは、上記の例で使用された属性を示しています。
  • address: このアドレスに送信されたメッセージは別のアドレスに迂回されます
  • forwarding-address: メッセージは古いアドレスからこのアドレスに迂回されます
  • filter-string: filter-string 値に一致するメッセージが迂回されます。他のすべてのメッセージは通常のアドレスにルーティングされます
  • transformer-class-name: このパラメーターを指定すると、一致する各メッセージの変換が実行されます。これにより、迂回する前にメッセージの本文またはプロパティーを変更できるようになります
  • exclusive: 特別な迂回を有効または無効にするために使用されます