2

FTP サーバーから読み取り、メッセージを処理するルートがあります。ルートには、メッセージの処理中に例外がスローされたときに、メッセージを何らかの Bean にルーティングする DeadLetterChannel エラー ハンドラがあります。

例外がエラー ハンドラによって処理されると、Camel はすべてが正常に渡されたと想定し、それでも FTP ファイルを削除します。

エラー ハンドラを削除すると、例外が発生しても Camel はファイルを削除しません。

私の質問はどうすれば DeadLetterChannel エラーハンドラを持ち、同時に処理が失敗したときに Camel が FTP ファイルを削除するのを止めることができますか?

4

2 に答える 2

3

このオプションnoop=trueは、ftp エンドポイントで設定できます。その後、ファイルはそのままになります。

ただし、今後ファイルの取得をスキップする方法を検討する必要がありますか? そのために、べき等リポジトリを使用して、以前に処理したファイルを追跡できます。または、完了時にファイルを移動することもできます。

ftp コンポーネントはファイル コンポーネントを拡張するため、詳細はhttp://camel.apache.org/file2を参照してください。

于 2013-06-15T07:23:58.977 に答える
1

これを行うには、いくつかのオプションがあります。

  1. オプションをまったく使用せずdelete=true、「成功」シナリオでファイルの削除を自分で処理します。これは比較的透過的です。
  2. DLC に入ると、消費元のエンドポイントを操作できます。したがって、DLC で独自のプロセッサを定義するだけですonPrepareFailure。例を参照してください:deadLetterChannel("jms:dlc").onPrepareFailure(new ErrorProcessor()) その後、getContext()メソッドを使用してキャメル コンテキストを取得し、いずれかのgetEndpoint()メソッドを使用してコンシューマ エンドポイントを取得できます。エンドポイントを取得すると、どの「プロセス ファクトリ」クラスが使用されているgetProcessStrategyかを確認でき、フラグを更新しdeleteてファイルの削除を回避できます。このエンドポイントでは、メソッドを使用して独自の「processStrategy」クラスを定義することもできますsetProcessStrategy。あなたのケースでどのプロセス戦略クラスが使用されているかを自分で調べてください。次に、適切な削除メソッドをオーバーライドして、deleteLocalWorkFile何もしないでください。
于 2017-11-07T21:13:05.500 に答える