11

第一个问题:

我无法真正理解 和 之间的enrich()区别pollEnrich()。也许骆驼使用的术语不是那么好。

我在这里读到:http: //camel.apache.org/content-enricher.html

使用丰富的 DSL 元素丰富内容

Camel 在 DSL 中带有两种内容丰富器

  • 丰富
  • 民意调查丰富

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

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

第二个问题:

在“行动中的骆驼”一书中 p. 72 他们说:

Enrich 和 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,这不是“当前交换”吗?如果不是,那么“原交易所”代表什么交易所?他们所说的“当前交换”是什么意思?

4

1 回答 1

24

这是区别:

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

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

也就是说,从 Camel 2.12 开始,有一个选项可以指定聚合策略,以将传入/返回的交换合并enrichpollEnrich

有关使用聚合策略的 pollEnrich 的示例,请参阅此单元测试

于 2013-10-01T17:54:47.123 回答