我想下载一个文件的名称和内容在Apache Camel 列表。
目前我下载所有文件的文件内容作为byte[]并将它们存储在一个List中。然后我使用ConsumerTemplate读取列表。这很好用。这是我的路线:
from(downloadUri)
.aggregate(AggregationStrategies.flexible(byte[].class).accumulateInCollection(
LinkedList.class))
.constant(true)
.completionFromBatchConsumer()
.to("direct:" + this.destinationObjectId);
我得到了所有下载文件内容的列表,如所需的byte[]。
现在我想扩展它,使它下载每个文件的内容和文件名。它将存储在一个pair对象中:
public class NameContentPair {
private String fileName;
private byte[] fileContent;
public NameContentPair(String fileName, byte[] fileContent) { ... }
}
每个下载文件的这些配对对象将依次存储在一个列表中。我如何更改或扩展我的路由来实现这一点?
我试过 Camel 转换器,但不能把它们正确地建立到我的路线中。我总是把路线设置错误。
1条答案
按热度按时间bf1o4zei1#
我通过实现一个自定义的AggregationStrategy解决了这个问题。
它从每个Exchange中读取文件名和文件内容,并将它们作为NameContentPair对象放入一个列表中。文件内容和文件名作为RemoteFile出现在Exchange的主体中,并从那里读取。
常规聚合实现基于https://camel.apache.org/components/3.15.x/eips/aggregate-eip.html中的示例实现
然后将聚合策略添加到路由中