使用Apache Camel获取S3对象

问题描述 投票:0回答:1

我正在尝试用骆驼暴露其他端点。它将显示一个json数据,该数据位于s3存储桶中存储的某些.json文件中。另外,它还会按日期范围进行过滤。

首先,我在骆驼路线中获得了一些s3对象信息。 (我正在使用Kotlin)

//expose the endpoint
        from("jetty:http://0.0.0.0:8080/getObjects")
                .routeId("list-objects-on-bucket")
                .to("aws-s3://[bucket-name]?amazonS3Client=#s3Client&operation=listObjects")
                .process(ListObjects())
                .to("direct:filter-list-from-s3")

然后,我过滤数据。 (直到这里一切都还好)

from("direct:filter-list-from-s3")
                .routeId("filter-list-from-s3")
                .process(FilterObjects())
                .to("log:info")

但是在我的FilterObject类中,我不知道如何下载每个匹配的文件(查看if语句)并将其传递到下一个将对其进行处理的路由

class SaoMateusFilterObjects : Processor {
    override fun process(exchange: Exchange?) {

        val start_date = exchange!!.getIn().getHeader("start_date") as String
        val end_date = exchange.getIn().getHeader("end_date") as String

        val formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy")
        val start = LocalDate.parse(start_date).format(formatter)
        val end = LocalDate.parse(end_date).format(formatter)

        val objectsNames = exchange!!.getIn().body as LinkedList<String>
        for (objectName in objectsNames) {
            if(objectName.contains(start) && objectName.contains(end) && objectName.contains(".json")) {
                exchange.getIn() to "aws-s3://[bucket-name]?amazonS3Client=#s3Client&operation=getObject&fileName=$objectName"
            }
        }
    }

}

一些问题是:

1-我想阅读。我认为我不能使用from()方法。因为它只能使用一次。因此,to()方法用于读取。

2- exchange.getIn()。to(“ [s3-uri]”)可能/必须在S3Object()中进行转换。怎么样??

有人可以帮我吗?

谢谢

spring-boot amazon-s3 apache-camel
1个回答
0
投票

代替.to路由,使用.bean()并使用s3.getObject方法来获取S3Object。

总是优先使用.bean()而不是.processor()。

[offical_s3_java_object操作样本。

© www.soinside.com 2019 - 2024. All rights reserved.