2016-06-27 96 views
2

我是新來的apache駱駝框架,我使用2.15.1版本。 我用例是輪詢AWS S3存儲,並從中下載新創建的文件,併爲我做如下駱駝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> 

我的問題是駱駝投票,再而下載同一個文件。我希望駱駝從aws s3下載文件,這些文件在Constants.REQ_FOLDER中不存在,並且不要駱駝下載已存在的文件。

任何人都可以請幫助我!

問候, 拉哈夫

+0

它已經有一段時間了,但是想知道你是否找到了解決方案。我認爲冪等消費者應該是解決方案。 –

回答

0

由於您使用deleteAfterRead等於假,每次消費者調查S3鬥,你會得到相同的文件集和駱駝將再次處理每個文件。

您將需要使用冪等存儲庫或構建自己的自定義處理器來跳過已存在於Constants.REQ_FOLDER中的文件,或者您可以使用駱駝必須提供的某個緩存組件,將S3密鑰放入緩存一旦文件被下載,並通過使用高速緩存上的get操作,在重新裝載它之前檢查緩存中的密鑰。