2017-11-13 27 views
0

私はEIPデザイン関連のクエリがあります。チャンクでCSVファイルを処理し、残りのAPIを呼び出す必要があります。ファイル全体の処理が完了したら、別のRest APIを呼び出す必要があります完了する必要があります。私はルートがトランザクションされるようにしたいので、私は間にキューを持っています。エンドシステムが利用できない場合は、ブローカレベルで再試行が行われます。Apache camel - EIPデザインクエリ

私の流れは以下の通りです。 まず流れ: CSVファイル - >キューに100 records->場所メッセージのチャンクで割れ目

第二流(処理済ルート):キューからメッセージをピック は - >のREST APIに

秒を呼び出しますフローが処理されます。私はフローを破るので、それは完了呼び出しにどのように呼び出すかわからない非同期です。私は各チャンク処理のステータスに永続的なストアを持っていません。

とにかく、私はそれをJMS機能やCamelを使って実現できますか?

あなたが最初のフローのために使用することができますどのような
+0

はい、できます。まず自分で試してみると分かります。この質問は、あまりにも広すぎて、SOの質問ではありません。 –

+0

確かに私はどこにEIPデザイン関連のクエリを投稿するか分からなかったので、私はここに投稿しました。 – Ravi

答えて

0

はキャメルスプリッタEIPです:


ドキュメントを見て http://camel.apache.org/splitter.html

と密接に、あなたは、各分割交換可能な3つの交換特性があることがわかります

  • CamelSplitIndex:分割される各Exchangeごとに増加する分割カウンタ。カウンタは0から始まります。
  • CamelSplitSize:分割された交換の総数。このヘッダーはストリームベースの分割には適用されません。 Camel 2.9以降では、このヘッダーはストリームベースの分割でも設定されますが、完成したExchangeでのみです。
  • CamelSplitComplete:このExchangeが最後かどうか。

Exchangeのプロパティであるため、メッセージをキューに送信する前にそれらをJMSヘッダーに配置する必要があります。しかし、2番目のフローで情報を利用できるようになり、最後のメッセージがどれかを知ることができます。

CamelSplitCompleteフラグは必ずしも2番目のフローの最後のメッセージを意味するわけではないので、すべて非同期であることに注意してください。あなたはステートフルカウンタを作成するか、非同期に対処するためにResequencer EIP http://camel.apache.org/resequencer.htmlを使用することができます。

+0

こんにちは忠義、ヒントをお寄せいただきありがとうございます。 – Ravi

+0

こんにちは私は、メモリベースのresequencerとjms trasactionの一部にすることはできません以下のポストから理解しています。 http://camel.465427.n5.nabble.com/Camel-Resequencer-and-JMs-transactions-td5766843.html – Ravi

+0

@Raviああ、そうです。したがって、CamelのUnitOfWork http://camel.apache.org/oncompletion.htmlでカスタムカウンタインプラントを使用する必要があるかもしれませんが、トランザクション障害時にカスタムの補償を書くことができます。 –