我正在尝试使用骆驼路线在两个s3存储桶之间复制文件,根据文档,这应该很简单,但是路线似乎无提示地失败。
从源存储桶中读取对象,并成功将其删除。测试文件只有5K,所以不是很大。如果目标存储桶尚不存在,但未在目标存储桶中创建对象,则会创建目标存储桶。日志中没有错误。
我正在使用的Java DSL如下。
from("aws-s3://my-source-bucket?amazonS3Client=#s3Client")
.to("aws-s3://my-target-bucket?amazonS3Client=#s3Client")
调试时,我可以看到exchange.getIn()。getBody()。toString()包含我正在测试的文本文件。
如果我尝试将S3源文件提交到可以的文件,并且如果我尝试将文件也可以正常运行的S3目标文件,那么我不认为端点配置有任何不正确之处。
我正在使用具有以下mvn依赖项的spring boot应用程序。
<dependencies>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-spring-boot</artifactId>
<version>2.23.0</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-aws</artifactId>
<version>2.23.0</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-sqs</artifactId>
<version>1.11.485</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
我现在已经没主意了,其他人有没有东西?
谢谢, 金
答案 0 :(得分:0)
自您发布此内容已经一年了,因此此答案可能与您无关。我在尝试创建从S3到S3的路由时遇到了同样的问题,但最终发现了问题。这是我对其他遇到相同问题的解决方案。
在Apache Camel S3组件中,有一个生产者操作,称为copyObject。只需将“&operation = copyObject”添加到您的生产者路线即可。所需的标题为:
我的骆驼版本:3.0.0-RC3(也应与2.24版一起使用)
@Override
public void configure() throws Exception {
//URI Paths
String inDirectory = "aws-s3://my-source-bucket?amazonS3Client=#s3Client";
String outDirectory = "aws-s3://my-target-bucket?amazonS3Client=#s3Client";
//For the copyObject to work you need to specify the name of the destination bucket
String targetBucket = "my-target-bucket";
from(inDirectory)
.process(exchange -> {
//set relevant headers, copyObject needs these set to work properly
String key = exchange.getIn().getHeader("CamelAwsS3Key", String.class);
exchange.getIn().setHeader("CamelAwsS3BucketDestinationName", targetBucket);
exchange.getIn().setHeader("CamelAwsS3DestinationKey", key);
})
.to(outDirectory + "&operation=copyObject");
}
此路由还适用于在AWS账户之间复制存储桶中的对象。您只需要在每个帐户中设置相关权限。您可以了解如何进行此操作here。
相关链接:
希望这对某人有帮助!让我知道您是否有任何疑问或更好的方法!