【问题标题】:Camel - content enricher: enrich() vs pollEnrich()Camel - 内容丰富器:enrich() 与 pollEnrich()
【发布时间】:2013-10-06 13:36:24
【问题描述】:

第一个问题:

我无法真正理解enrich()pollEnrich() 之间的区别。也许 Camel 使用的术语不是很好。

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

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

Camel 在 DSL 中提供了两种内容丰富器

  • 丰富
  • 投票丰富

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

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

第二个问题:

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

Enrich 和 pollEnrich 无法访问当前交换中的信息

rich 和 pollEnrich 都不能利用任何信息 从目前的交易所。这意味着,例如,您不能 将文件名标题存储在 pollEnrich 的交换中以用于 选择一个特定的文件。如果骆驼在未来这可能会改变 团队可以找到解决方案。

但是,他们给出了一个类似于以下的代码示例,用于实现聚合策略:

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

【问题讨论】:

    标签: activemq apache-camel


    【解决方案1】:

    这里有区别:

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

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

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

    请参阅this unit test 以获取具有聚合策略的 pollEnrich 示例

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 2020-11-14
      • 1970-01-01
      • 1970-01-01
      • 2020-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多