5.6. メッセージトランスレーター
概要
図5.8「Message Translator パターン」 で示されている Message Translator パターンは、メッセージの内容を変更し、異なる形式に変換するコンポーネントを記述します。Apache Camel の Bean インテグレーション機能を使用して、メッセージの変換を実行できます。
図5.8 Message Translator パターン
Bean インテグレーション
登録された Bean でメソッドを呼び出し可能にする Bean インテグレーションを使用して、メッセージを変換できます。たとえば、ID が myTransformerBean
の Bean でメソッド myMethodName()
を呼び出すには、以下を実行します。
from("activemq:SomeQueue") .beanRef("myTransformerBean", "myMethodName") .to("mqseries:AnotherQueue");
myTransformerBean
Bean は Spring XML ファイルまたは JNDI で定義されます。beanRef()
で method name パラメーターを省略すると、Bean インテグレーションはメッセージエクスチェンジを確認して、呼び出すメソッド名を推測しようとします。
また、独自の明示的なプロセッサー Processor
を追加して、以下のように変換を実行することもできます。
from("direct:start").process(new Processor() { public void process(Exchange exchange) { Message in = exchange.getIn(); in.setBody(in.getBody(String.class) + " World!"); } }).to("mock:result");
または、DSL を使用して以下のように変換を明示的に設定できます。
from("direct:start").setBody(body().append(" World!")).to("mock:result");
また、テンプレート を使用して、ある宛先からのメッセージを消費し、Velocity や XQuery などのメッセージに変換してから、別の宛先に送信することもできます。InOnly 交換パターン (一方向メッセージング ) を使用する例は次のとおりです。
from("activemq:My.Queue"). to("velocity:com/acme/MyResponse.vm"). to("activemq:Another.Queue");
InOut (request-reply) セマンティクスを使用して、テンプレート生成の応答で ActiveMQ の My.Queue
キューでリクエストを処理する場合、以下のようなルートを使用して応答を JMSReplyTo
宛先に送り返すことができます。
from("activemq:My.Queue"). to("velocity:com/acme/MyResponse.vm");