架构
内容增强
登录后可跨设备保存划线和私人笔记登录
内容增强器

在 Camel 中,内容增强可以通过多种方式实现:
最符合 Camel 风格的方式是使用 Enrich EIP。
使用消息转换器进行内容增强
你可以从某个目的地消费消息,使用类似 Velocity 或 XQuery 的方式对其进行转换,然后将其发送到另一个目的地。
- Java
- XML
- YAML
from("activemq:My.Queue")
.to("velocity:com/acme/MyResponse.vm")
.to("activemq:Another.Queue");<route>
<from uri="activemq:My.Queue"/>
<to uri="velocity:com/acme/MyResponse.vm"/>
<to uri="activemq:Another.Queue"/>
</route>- route:
from:
uri: activemq:My.Queue
steps:
- to:
uri: velocity:com/acme/MyResponse.vm
- to:
uri: activemq:Another.Queue你也可以在 Java DSL 中直接(使用流畅构建器)将消息作为表达式(Expression)来丰富。在下面的示例中,通过在消息体后追加 ` World!` 来丰富消息:
仅 Java:用于向消息体追加内容的流畅构建器
from("direct:start")
.setBody(body().append(" World!"))
.to("mock:result");流畅构建器在 XML 或 YAML DSL 中不可用,此时你可以使用 Simple 语言:
- Java
- XML
- YAML
from("direct:start")
.setBody(simple("${body} World!"))
.to("mock:result");<route>
<from uri="direct:start"/>
<setBody>
<simple>${body} World!</simple>
</setBody>
<to uri="mock:result"/>
</route>- route:
from:
uri: direct
parameters:
name: start
steps:
- setBody:
expression:
simple:
expression: "${body} World!"
- to:
uri: mock
parameters:
name: result使用 Processor 进行内容增强
在本例中,我们通过显式 Java 代码添加自己的 Processor,以增强消息内容:
纯 Java 实现:使用内联 Processor 来增强消息
from("direct:start")
.process(new Processor() {
public void process(Exchange exchange) {
Message msg = exchange.getMessage();
msg.setBody(msg.getBody(String.class) + " World!");
}
})
.to("mock:result");在上面的 Java 代码中,我们使用了内联的 Processor,这在 XML 或 YAML DSL 中较难实现。良好的做法是为自定义 Processor 编写一个类,然后在 DSL 中引用它:
纯 Java:在 Registry 中注册的自定义 Processor 类
@BindToRegistry("myProcessor")
public class MyProcessor implements Processor {
@Override
public void process(Exchange exchange) {
Message msg = exchange.getMessage();
msg.setBody(msg.getBody(String.class) + " World!");
}
}然后你可以通过该处理器的 id 来引用它。
- Java
- XML
- YAML
from("direct:start")
.process("myProcessor")
.to("mock:result");<route>
<from uri="direct:start"/>
<process ref="myProcessor"/>
<to uri="mock:result"/>
</route>- route:
from:
uri: direct
parameters:
name: start
steps:
- process:
ref: myProcessor
- to:
uri: mock
parameters:
name: result使用 Bean EIP 进行内容丰富
我们可以使用 Bean EIP,调用任意 bean 上的任意 Java 方法来充当内容丰富器:
- Java
- XML
- YAML
from("activemq:My.Queue")
.bean("myBeanName", "doTransform")
.to("activemq:Another.Queue");<route>
<from uri="activemq:Input"/>
<bean ref="myBeanName" method="doTransform"/>
<to uri="activemq:Output"/>
</route>- route:
from:
uri: activemq:Input
steps:
- bean:
ref: myBeanName
method: doTransform
- to:
uri: activemq:Output使用 Enrich EIP 进行内容充实
Camel 提供了两种内容充实(Content Enricher)EIP:
- Enrich EIP:这是最常见的内容充实方式,使用
Producer来获取数据。它通常用于请求-回复(Request Reply)消息传递,例如调用外部 Web 服务。 - Poll Enrich EIP:使用轮询消费者(Polling Consumer)来获取补充数据。它通常用于事件消息(Event Message)消息传递,例如读取文件或通过 FTP 下载文件。
更多详情请参阅 Enrich EIP 和 Poll Enrich EIP。
评论
登录后参与评论
正在加载评论…
KnowForge