5.6. 消息转换器


概述

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

图 5.8. Message Translator Pattern

消息转换模式

Bean 集成

您可以使用 bean 集成转换消息,从而可以调用任何已注册 bean 的方法。例如,要在 ID 为 myTransformerBean 上调用 myMethodName () 的方法:

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

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

您还可以使用模板来消耗一个目的地的消息,使用诸如 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");
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.