2016-09-15 4 views
0

SFTPサーバーからS3バケットにファイルを送信しようとしています。私はapache camelを使ってspring-bootアプリケーションを書いています。これは1つのノードで完璧に動作します。アプリケーションを複数のノードに拡張したい複数のノードで同じファイルを処理しないようにするには、tutorialを使用してHazelcastIdempotentRepositoryを使用しています。CamelとHazelcastを使用してSFTPからS3にファイルを送信するにはどうすればよいですか?

from(source) 
    .pollEnrich(source) 
    .log("Uploading file ${file:name} started...") 
    .setHeader(S3Constants.CONTENT_LENGTH, simple("${in.header.CamelFileLength}")) 
    .setHeader(S3Constants.KEY, simple("${in.header.CamelFileNameOnly}")) 
    .toF("hazelcast:%sfoo", HazelcastConstants.SEDA_PREFIX); 

fromF("hazelcast:%sfoo", HazelcastConstants.SEDA_PREFIX) 
    .idempotentConsumer(simple("*"), hazelcastIdempotentRepo) 
    .setHeader(HazelcastConstants.OBJECT_ID, simple("${exchangeId}")) 
    .setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.PUT_OPERATION)) 
    //.setHeader(S3Constants.CONTENT_LENGTH, simple("${in.header.CamelAwsS3ContentLength}")) 
    .setHeader(S3Constants.KEY, header(S3Constants.KEY)) // How to get file name here ?? 
    .toF(destination) 
    .log("Uploading file ${file:name} completed..."); 

私は私がSFTPエンドポイントにポーリングしていたときに、この作品次の例外

java.lang.IllegalArgumentException: AWS S3 Key header missing. 

を取得しています。

.setHeader(S3Constants.KEY, simple("${in.header.CamelFileNameOnly}")) 

次のようにファイル名をハードコードすると、正常に動作します。

.setHeader(S3Constants.KEY, constant("test.txt")) 

Hazelcast QueueからfileNameヘッダーを取得するにはどうすればよいですか?

答えて

0

$ {ファイル:onlyname}を使用してEXTNでのみ名前の部分をつかむために

http://camel.apache.org/file-language.html

使用簡単な言語(http://camel.apache.org/simple.html)でファイルの言語用のラクダのマニュアルを参照してくださいあなたがいるので

をSFTPからS3への転送では、パス全体がキーとして必要な場合があります。$ {file:name}は役に立ちます。

+0

ファイル言語は、ファイルコンポーネント( 'file:'、 'direct:'、 'ftp : ')など。' 'ヘイルキャスト:seda' – Gangaraju

+0

スクリプトを書く必要がありますか?AWS S3クライアントは役に立たないのですか? – koolhead17

関連する問題