2

ftp ディレクトリ内のすべてのテキスト ファイルを読み取って解析しようとしています。解析が成功した場合は、それらを別のディレクトリ (デフォルトのディレクトリ、つまり .done ディレクトリではない) に移動します。解析が失敗した場合、ファイルは ftp ディレクトリに残ります。概念は単純に見えますが、私のルートは ftp から単一のファイルを読み取るだけで、ルートは 1 つのファイルを取得した後に終了します。

コードは次のとおりです。

@Override
    public void configure() throws Exception {

         from(EndPointConstants.DIRECT + GetDriverProductInfo.class.getSimpleName())  
        .pollEnrich(ftp://ingestion_user@10.207.6.42/fantics?password=******&recursive=true)
        .to("file://test/readFile")

単一のファイルしか取得できず、プロセスが再帰的に発生していないというのは、pollEnrich に関連するものですか?

4

1 に答える 1

3

解析が成功した場合は、それらを別のディレクトリ (デフォルトのディレクトリ、つまり .done ディレクトリではない) に移動します。

次の例のように使用します。

.to("file://test/readFile?autoCreate=true&moveFailed=.failed/${date:now:yyyyMMdd}/${file:name}&move=.processed/${date:now:dd-MM-yyyy}/${file:name}")

Camel のドキュメント ( FTP/SFTP/FTPS コンポーネント) から:

FTP コンシューマーは、デフォルトで、消費されたファイルをリモート FTP サーバーにそのまま残します。ファイルを削除したり、別の場所に移動したりする場合は、明示的に構成する必要があります。たとえば、delete=true を使用してファイルを削除したり、move=.done を使用してファイルを非表示の done サブディレクトリに移動したりできます。デフォルトでファイルを .camel サブディレクトリに移動するため、通常のファイル コンシューマーは異なります。Camel が FTP コンシューマに対してデフォルトでこれを行わない理由は、ファイルを移動または削除できる権限がデフォルトで不足している可能性があるためです。

たとえば、次のように使用できます。

&noop=false

&move

&delete=false

編集:

pollEnrich() はこのケースには適していないため、このようなもの (次のコード) を考え出す必要があると思います。

(次のコードは、使用例ではなく、そのまま使用することを強くお勧めしません)

from("direct:scan")
    .process(new Processor()
    {
        public void process(Exchange exchange) throws Exception
        {
            ConsumerTemplate consumerTemplate = exchange.getContext().createConsumerTemplate();
            ProducerTemplate producerTemplate = exchange.getContext().createProducerTemplate();
            producerTemplate.setDefaultEndpointUri("file:..");
            producerTemplate.send(consumerTemplate.receive("ftp:.."));
        }
    });

乾杯!

于 2012-09-24T07:06:08.040 に答える