我是apache camel框架的新手,我正在使用 2.15.1 版本。 我的用例是轮询aws s3存储桶并从中下载新创建的文件,为此我正在做如下
**camel-route**
from("aws-s3://" + Constants.S3_BUCKET + "?amazonS3Client=#client&deleteAfterRead=false")
.routeId("awsFileCopyRoute")
.log(LoggingLevel.INFO, "awsFileCopyRoute", "Camel AWS Key: ${header.CamelAwsS3Key}")
.to("file://" + Constants.REQ_FOLDER + "?fileName=${header.CamelAwsS3Key}");
the awsS3Client "client" i'm setting in applicationContext.xml as follows
<bean id="defaultAWSCredentialsProviderChain" class="com.amazonaws.auth.DefaultAWSCredentialsProviderChain" />
<bean id="clientConfiguration" class="com.amazonaws.ClientConfiguration" />
<bean id="client" class="com.amazonaws.services.s3.AmazonS3Client">
<constructor-arg ref="defaultAWSCredentialsProviderChain" />
<constructor-arg ref="clientConfiguration" />
</bean>
我的问题是骆驼一次又一次地轮询和下载同一个文件。我希望camel从aws s3下载文件,这些文件在Constants.REQ_FOLDER中不存在,并且禁止驼峰下载已经存在的文件
任何人都可以帮助我!!
此致 RAGHAV
答案 0 :(得分:0)
由于您使用deleteAfterRead等于false,因此每次使用者轮询S3存储桶时,您将获得相同的文件集,而Camel将再次处理每个文件。
您需要使用幂等存储库或构建自己的自定义处理器以跳过已存在于Constants.REQ_FOLDER中的文件,或者您可以使用Camel提供的缓存组件之一,将S3密钥放入文件下载后的缓存,并在重新下载之前检查缓存中的密钥,方法是在缓存上使用get操作。