Apache Camel AWS S3 存储桶嵌套目录:

Cha*_*Hey 1 amazon-s3 apache-camel

我目前正在尝试在 AWS 上将 Apache Camel 与 S3 存储桶结合使用。目前,我们的代码库的每个环境都有 1 个存储桶(例如:开发存储桶、e2e 存储桶、生产存储桶)。

我们希望使用 1 个存储桶,其中包含多个目录,以避免混乱并巩固空间。然后我们可以将 Camel 指向端点内的一个文件夹来监听(似乎可行)。在尝试配置时,这已经变得非常成问题。Camel 似乎期望它可以连接的每个端点都有一个存储桶。

有人可以阐明这是否可行,或者是否有必要每个端点拥有 1 个存储桶?Camel文档没有说明是否可以。

小智 5

事实上,正如 Alex Nano 所写,s3 文件夹只是对象键(“文件名”)的前缀,因此如果您想设置多个路由来监控不同的 s3“文件夹”,您可以使用 aws:s3 端点的前缀选项

前缀与您使用 aws s3 cli 的功能相同,例如

aws s3 ls s3://mybucket/myfolderInsideBucket/
Run Code Online (Sandbox Code Playgroud)

JUnit 示例

public class CamelAwsS3Test extends CamelTestSupport {

@EndpointInject(uri = "mock:result")
private MockEndpoint resultEndpoint;

@Before
public void setup() throws Exception {
    context.start();
}

@Test
public void foo() throws Exception {
    int expectedFileCount = 3
    resultEndpoint.expectedMessageCount(expectedFileCount);
    resultEndpoint.assertIsSatisfied();
}

@Override
protected JndiRegistry createRegistry() throws Exception {
    JndiRegistry registry = super.createRegistry();
    final String accessKey = "ACCESSKEY";
    final String secretKey = "SECRETKEY";
    AmazonS3 client = new AmazonS3Client(new BasicAWSCredentials(accessKey, secretKey));
    registry.bind("amazonS3Client", client);

    return registry;
}

@Override
protected RoutesBuilder createRouteBuilder() throws Exception {

    return new RouteBuilder() {
        @Override
        public void configure() throws Exception {
            from("aws-s3://{BUCKET}?amazonS3Client=#amazonS3Client&prefix=${FOLDER}")
                    .log("hey ${body}").to("mock:result");
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

}