5.6. 消息 Translator
概述 复制链接链接已复制到粘贴板!
图 5.8 “消息转换模式” 中 显示的消息转换器 模式描述了一个组件,它修改消息的内容,将其转换为不同的格式。您可以使用 Apache Camel 的 bean 集成功能来执行消息转换。
图 5.8. 消息转换模式
Bean 集成 复制链接链接已复制到粘贴板!
您可以使用 bean 集成转换消息,这可让您调用任何注册的 Bean 的方法。例如,要在 ID 为 myTransformerBean
上调用方法 myMethodName ()
,请执行以下操作:
from("activemq:SomeQueue") .beanRef("myTransformerBean", "myMethodName") .to("mqseries:AnotherQueue");
from("activemq:SomeQueue")
.beanRef("myTransformerBean", "myMethodName")
.to("mqseries:AnotherQueue");
其中,myTransformerBean
Bean 在 Spring XML 文件或 JNDI 中定义。如果忽略来自 beanRef ()
的 method name 参数,bean 集成将尝试通过检查消息交换来调用的方法名称。
您还可以添加您自己的显式处理器 实例
来执行转换,如下所示:
或者,您可以使用 DSL 显式配置转换,如下所示:
from("direct:start").setBody(body().append(" World!")).to("mock:result");
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");
from("activemq:My.Queue").
to("velocity:com/acme/MyResponse.vm").
to("activemq:Another.Queue");
如果要使用 InOut (request-reply)语义处理具有模板生成的响应的 My.Queue
队列上的请求,您可以使用类似如下的路由将响应发送回 JMSReplyTo
目的地:
from("activemq:My.Queue"). to("velocity:com/acme/MyResponse.vm");
from("activemq:My.Queue").
to("velocity:com/acme/MyResponse.vm");