0

Camel ベースの ESB に取り込んで大きなログ ファイルを処理するシナリオがあります。このバスの最初のLogTransformer目的地は、ログ ファイルからログ メッセージを 1 つずつ (リアルタイムで) 解析し、XML スニペットを作成するプロセッサです。

<log-record level="INFO" source="MyApp" .../>

これらの<log-record/>XML スニペットのそれぞれがメッセージ キューに入れられ、バスによって取得されます。最終的に、MySQL DB に格納されます。

ログ ファイルが完全に処理された後にのみ起動したい特定のプロセッサがあります (すべてのログ レコードが変換され<log-record/>てエンキューされ、バスによって処理され、DB に保存されます)。レポート ジェネレーター、BI コンポーネントなど。これらのプロセッサは、ログ全体がキューに入れられるまで開始しないでください。

これらのプロセッサが起動できることを自動的に示す Camel の方法は何ですか?

私が思いつく最善の方法は、LogTransformerプロセッサ (ログ レコードを解析し、<log-record>XML に変換し、キューに入れる部分)がログの処理を終了した後に EOF ログ レコードを作成することです。のようなもの<log-record eof="true">。その後、通常どおりこのメッセージをキューに入れます。

バス内の最後のプロセッサ ( <log-record>MySQL に永続化される) が EOF ログ レコードに遭遇すると、それを永続化する代わりに、それをキューに入れます。

これらのレポート ジェネレーター、BI コンポーネントなどは、このキューのメッセージが開始されるのを待ちます。

この解決策は複雑に思えます。私は ESB と Camel を初めて使用するので、このシナリオを処理する EIP/プロセッサがあると考えましたが、見つけられないようです。キャメル ウィザードは、このソリューションをどのように構築しますか?

4

1 に答える 1

0

スプリッター (http://camel.apache.org/splitter.html) とアグリゲーター (http://camel.apache.org/aggregator2.html) をご覧ください。アグリゲーターは、completeSize を使用して、処理を続行するために必要なピースがすべて揃っているかどうかを判断できます。

于 2012-11-15T02:34:34.137 に答える