为什么Apache Camel Main忽略YAML DSL AWS 2-S3到AWS 2-S3路由中的目标存储桶名称?

k2arahey  于 2022-11-29  发布在  Apache
关注(0)|答案(1)|浏览(142)

我正在使用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中有问题?
提前感谢您的帮助。

sd2nnvve

sd2nnvve1#

这是因为来自原始存储桶 source-bucket 的使用者提供了包含其名称的标头。此标头将覆盖生成器中的 destination-bucket,以将其替换为目标存储桶。
您的程式码应该如下所示:

- route:
    from:
      uri: "aws2-s3:arn:aws:s3:source-bucket"
      parameters:
        region: "eu-central-1"
        accessKey: "xxxxx"
        secretKey: "xxxxx"
        deleteAfterRead: "false"
      steps:
        - remove-header:
          name: "CamelAwsS3BucketName"
        - to:
            uri: "aws2-s3:arn:aws:s3:destination-bucket"
            parameters:
              region: "eu-central-1"
              accessKey: "xxxxx"
              secretKey: "xxxxx"

这样,您就不会将标头传送到下一个端点。
这是发生在这里: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
顺便说一句,随着删除标题一切都应该按预期工作。

相关问题