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ヘッダーを取得するにはどうすればよいですか?
ファイル言語は、ファイルコンポーネント( 'file:'、 'direct:'、 'ftp : ')など。' 'ヘイルキャスト:seda' – Gangaraju
スクリプトを書く必要がありますか?AWS S3クライアントは役に立たないのですか? – koolhead17