5.6. message Translator
概述
消息转换器 模式 图 5.8 “Message Translator Pattern” 描述了修改消息内容的组件,将其转换为不同的格式。您可以使用 Apache Camel 的 bean 集成功能来执行消息转换。
图 5.8. Message Translator Pattern
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 集成将尝试通过检查消息交换来推断要调用的方法名称。
您还可以添加自己的显式处理器 实例
来执行转换,如下所示:
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 Exchange 模式(单向消息传递):
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");