我正在使用Apache Camel Main(请参阅https://camel.apache.org/components/next/others/main.html)组件版本3.19,并在route.yaml文件中指定了以下AWS 2-S3到AWS 3-S3的路由:
- route:
from:
uri: "aws2-s3:arn:aws:s3:source-bucket"
parameters:
region: "eu-central-1"
accessKey: "xxxxx"
secretKey: "xxxxx"
deleteAfterRead: "false"
steps:
- to:
uri: "aws2-s3:arn:aws:s3:destination-bucket"
parameters:
region: "eu-central-1"
accessKey: "xxxxx"
secretKey: "xxxxx"
我的应用程序如下所示:
public class MyApp {
public static void main(String[] args) throws Exception {
Main main = new Main(MyApp .class);
main.run(args);
}
}
上述路径和应用程序的目的是将所有文件从source-bucket
复制到destination-bucket
。
当我运行应用程序时,两个桶都已经存在,虽然source-bucket
包含一些文件,但destination-bucket
是空的。
但是,不是将文件复制到destination-bucket
中,而是将所有文件复制回source-bucket
中,同时覆盖现有文件。此外,运行应用程序后,destination-bucket
仍然是空的。
这是Camel Main中的错误还是我的route.yaml
中有问题?
提前感谢您的帮助。
1条答案
按热度按时间sd2nnvve1#
这是因为来自原始存储桶 source-bucket 的使用者提供了包含其名称的标头。此标头将覆盖生成器中的 destination-bucket,以将其替换为目标存储桶。
您的程式码应该如下所示:
这样,您就不会将标头传送到下一个端点。
这是发生在这里:https://github.com/apache/camel/blob/main/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/utils/AWS2S3Utils.java#L46
您还可以查看生成器端的copyObject操作:https://github.com/apache/camel/blob/main/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Producer.java#L403
顺便说一句,随着删除标题一切都应该按预期工作。