rap*_*apt 7 activemq-classic apache-camel
第1题:
我不能真正理解之间的差异enrich()和pollEnrich().也许Camel使用的术语并不是那么好.
我在这里阅读:http://camel.apache.org/content-enricher.html
使用丰富的DSL元素进行内容丰富
Camel带有两种丰富的DSL内容
- 丰富
- pollEnrich
enrich使用Producer来获取附加数据.它通常用于请求回复消息传递,例如用于调用外部Web服务.另一方面,pollEnrich使用轮询消费者来获取附加数据.它通常用于事件消息消息传递,例如读取文件或下载FTP文件.
我不明白有什么区别.他们似乎都通过消费来获得额外的数据(Web服务响应,FTP文件).那么为什么他们说Web服务响应是由"生产者"完成的呢?
第2个问题:
在"骆驼在行动"一书中.72他们说:
Enrich和pollEnrich无法访问当前交易所的信息
rich和pollEnrich都不能利用当前交易所的任何信息.这意味着,例如,您无法在交换机上存储文件头,以供pollEnrich用于选择特定文件.如果Camel团队能够找到解决方案,将来可能会发生变化.
但是,他们提供了类似于以下的代码示例,用于实现聚合策略:
public class ExampleAggregationStrategy implements AggregationStrategy {
public Exchange aggregate(Exchange original, Exchange resource) {
Object originalBody = original.getIn().getBody();
Object resourceResponse = resource.getIn().getBody();
Object mergeResult = ... // combine original body and resource response
if (original.getPattern().isOutCapable()) {
original.getOut().setBody(mergeResult);
} else {
original.getIn().setBody(mergeResult);
}
return original;
}
}
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我看到他们可以访问Exchange original,是不是"当前的交换"?如果没有,那么"原始交换"代表什么交换呢?他们的"当前交换"是什么意思?
Ben*_*Day 13
这是区别:
enrich假设您要将传入的Exchange用作另一个服务请求的参数.例如,您的传入Exchange可能是一个userID,但您确实需要整个User对象,因此您可以enrich将userID传递给REST服务,该服务返回成为Exchange的User对象等.
pollEnrich假设传入的Exchange是一个简单的触发器,它告诉PollingConsumer查找数据并创建Exchange(忽略传入Exchange的内容).例如,您可能有一个计时器或其他业务流程事件,需要选择要处理的文件等,表示传入的Exchange数据不用于动态配置PollingConsumer ...只有URI用于此目的.
也就是说,骆驼2.12,有指定的聚合策略,以进入/返回交流结合起来,两者的选择enrich和pollEnrich
有关聚合策略的pollEnrich示例,请参阅此单元测试