Activemq Camel-content enricher:enrich()与pollEnrich()的比较

Activemq Camel-content enricher:enrich()与pollEnrich()的比较,activemq,apache-camel,Activemq,Apache Camel,第一个问题: 我无法真正理解rich()和pollrich()之间的区别。也许骆驼使用的术语不是很好 我在这里读到: 使用丰富DSL元素丰富内容 Camel在DSL中提供了两种内容丰富器 充实 鳕鱼 enrich使用生产者获取附加数据。通常是 用于请求-应答消息传递,例如调用外部 网络服务。另一方面,PollRich使用轮询消费者 获取附加数据。它通常用于事件消息 消息传递,例如读取文件或下载FTP文件 我不明白有什么区别。他们似乎都是通过消费来获得额外的数据(Web服务响应、FTP文件)。

第一个问题:

我无法真正理解
rich()
pollrich()
之间的区别。也许骆驼使用的术语不是很好

我在这里读到:

使用丰富DSL元素丰富内容

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

  • 充实
  • 鳕鱼
enrich使用生产者获取附加数据。通常是 用于请求-应答消息传递,例如调用外部 网络服务。另一方面,PollRich使用轮询消费者 获取附加数据。它通常用于事件消息 消息传递,例如读取文件或下载FTP文件

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

第二个问题:

在《骆驼行动》一书中。72他们说:

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

enrich和pollEnrich都不能利用任何信息 从当前的交换。这意味着,例如,你不能 在exchange上存储文件名标头,以便用于 选择一个特定的文件。如果骆驼 团队可以找到解决方案

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

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;
    }

}
在这个示例中,我看到他们可以访问
交换原始文件
,这不是“当前交换”吗?如果不是,那么“原始交换”代表什么交换?

他们所说的“当前交换”是什么意思

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

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

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

有关聚合策略的示例,请参见