5.6. message Translator

概述

图 5.8 “Message Translator Pattern”显示的消息转换器 模式描述了一个修改信息内容的组件,将其转换为不同的格式。您可以使用 Apache Camel 的 Bean 集成功能来执行消息转换。

图 5.8. Message Translator Pattern

消息转换器模式

Bean 集成

您可以使用 bean 集成转换消息,允许您在任何注册的 Bean 上调用方法。例如,要在带有 ID 的 Bean、myTransformerBean 上调用方法 myMethodName()

from("activemq:SomeQueue")
  .beanRef("myTransformerBean", "myMethodName")
  .to("mqseries:AnotherQueue");

在 Spring XML 文件或 JNDI 中定义 myTransformer Bean。如果省略 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");

您还可以使用 模板 (template)来消耗来自一个目的地的消息,将其转换为 Velocity 或 XQuery 等内容,然后将其发送到另一个目的地。例如,使用 InOnly Exchange 模式(单向消息):

from("activemq:My.Queue").
  to("velocity:com/acme/MyResponse.vm").
  to("activemq:Another.Queue");

如果要使用 InOut (请求)语义来处理在 ActiveMQ 上的请求,使用模板生成的响应,那么您可以使用类似以下内容的路由来回 JMSReplyTo 目的地:

from("activemq:My.Queue").
  to("velocity:com/acme/MyResponse.vm");