2

Camelを使用してファイル受信プロセスを開発しようとしています。私がやろうとしていることは十分に単純なようです:

  • ファイルを受け取る
  • そのファイルを調べてメタデータを生成するWebサービスを呼び出します
  • そのメタデータに基づいてファイルを新しい場所に移動します
  • 新しい場所にあるファイルに作用する後続のプロセスを呼び出します

私はいくつかの異なるアプローチを試しましたが、どれも私が望むように正確に機能するようには見えません。私の主な問題は、ルートが完了するまでファイルが移動/名前変更されないため、ファイルがそのルート内で使用可能であることをダウンストリームプロセスに通知できないことです。

新しい名前と場所を特定するためにWebサービスを呼び出す必要があります。そうすると、本文が変更され、ファイルプロデューサーを使用してルート内からファイルを移動できなくなります。

他の解決策を聞いていただければ幸いです。

4

2 に答える 2

1

処理ルートに信号を送り、ファイルコンポーネントのdoneFile機能を使用してそれらをポーリングさせることができます。

最初のプロセスはファイルをコピーし、処理ルートを通知し、ファイルのコピーが完了すると、完了したファイルを書き込みます。完了したファイルが書き込まれると、処理ルートのファイルコンシューマーは、処理するファイルを取得します。これにより、ファイルが処理される前に書き込まれることが保証されます。

ファイルコンポーネントの「完了ファイルの使用」セクションを確認してください。

http://camel.apache.org/file2.html

于 2012-10-08T16:15:46.623 に答える
0

他のコンポーネントを使用すると、OnCompletion DSL構文を使用して、さらに処理するためにルート後メッセージをトリガーすることができます。

ただし、ファイルコンポーネントでは、move / doneがその「OnCompletion」トリガーと並行して発生し、ファイルが実際に実行されたかどうかを確認できないため、これは実際には実行できません。

ルート後の実行ロジックを登録できるUnitofWork APIを使用すると、運が良かったかもしれません(これは、ルートが完了したときにFileコンポーネントが移動を起動する方法です)。

ただし、本当にこのロジックが必要ですか?ファイルコンシューマーにウェイクアップ呼び出しを送信することをお勧めしますが、ファイルは本当にミリ秒単位で準備ができている必要がありますか?トリガーメッセージを受信したら、ファイルのポーリングを開始して、準備ができたらそれを取得することはできませんか?これは通常、ファイルベースのプロトコルを使用して行う方法です(または、トリガーを無視して、時々ポーリングします)。

于 2012-10-06T10:01:40.170 に答える