2013-09-30 60 views
6

1ST问题:骆驼 - 内容富集器:丰富()VS pollEnrich()

我不能真正理解enrich()pollEnrich()之间的差异。也许骆驼使用的术语不太好。

我读到这里:使用充实DSL元素

骆驼自带的内容富集的两种口味的DSL http://camel.apache.org/content-enricher.html

内容丰富

  • 丰富
  • pollEnrich

富集使用生产者获取附加数据。通常使用 来请求回复消息,例如调用外部的 Web服务。 pollEnrich另一方面使用轮询消费者 获取附加数据。它通常用于事件消息 消息传递,例如读取文件或下载FTP文件。

我不明白有什么区别。他们似乎都通过消费获得额外的数据(Web服务响应,FTP文件)。那么为什么他们说Web服务响应是由“制作者”完成的呢?

第二个问题:

在 “骆驼在行动” 的书页。 72他们说:

丰富和pollEnrich不能在目前的汇率

既不丰富也不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; 
    } 

} 

在这个例子中,我看到他们有机会获得Exchange original,这不正是“当前汇率“?如果不是,那么“原始交换”代表什么交换? 他们是什么意思的“当前交流”?

回答

12

这里的区别是:

  • enrich假设你想使用传入Exchange作为参数传递给了其他的服务请求。例如,您的传入Exchange可能是一个用户ID,但您确实需要整个用户对象,因此您可以通过将用户ID传递给REST服务,该服务返回成为Exchange的用户对象等。

  • pollEnrich假定传入的Exchange是一个简单的触发器,它告诉PollingConsumer查找数据并创建Exchange(忽略传入Exchange的内容)。例如,您可能有一个计时器或其他业务流程事件,需要拿起一个文件进行处理等等,也就是说,传入的Exchange数据不用于动态配置PollingConsumer ...只有URI用于此目的。

也就是说,骆驼2.12,有指定的聚合策略为pollEnrich的例子有聚集传入/返回交流结合起来,既enrichpollEnrich

this unit test选项策略