2013-09-05 12 views
7

Apache Camel(Camel 2.10.3、Java DSLベース)を使用して統合プロジェクトを構築しています。Apache Camelで破損/回復したJMS接続を検出するにはどうすればよいですか?

データベースからデータを抽出する(IN_DBと呼ぶ)、あるロジックを実行して別のデータベース(OUT_DB)に1日に1回挿入するルート、およびXMLデータのJMSトピックにサブスクライブする別のルートいくつかのロジックを作成し、それを同じデータベース(OUT_DB)に1日を通して挿入します。

JMSトピック接続が何らかの理由でダウンした場合、私たちは無期限に再接続しようとします。再接続が成功したら、データベース(IN_DB)に戻り、トピックがダウンしていたギャップ。

私の質問は、キャメルでこのロジック(「私は接続されていて、もう接続されました)」をどうすればいいのですか?トピックがダウンしたときにトピック消費者から始まるルートはどうなりますか?ルートは停止しますか?または、エラー・キューにエラー・メッセージを出しますか?トピックの接続を監視するために私自身のハンドラを書く必要がありますか、またはトピックがバックアップされ、メッセージヘッダーを設定したときにCamelが自動的に再接続するか、コンテキスト変数を設定して、私は再び接続されました 'シナリオが起こった?私はデータベースロードを呼び出すことについてルートロジックを構築するのはうれしいです。私はこのシナリオが起こったことをCamelで '検出'する最良の方法を理解できません。

ご迷惑をおかけして申し訳ございません。

答えて

1

キューへの再接続に関しては、使用しているJMSブローカーによって異なります。 ActiveMQを使用している場合は、URIを介して再接続する方法を設定して、別のブローカに再接続したり、タイムアウト後に同じブローカに再接続できるように設定できます。ドキュメントはhereです。

接続が失敗したことを検出するには、プログラムの観点から最も簡単なのは、トピックではなく永続的なキューを使用することです。しかし、それが実行可能ではないと仮定すると、私はあなたに2つの選択肢があると思う。

  1. JMS exception listenerを定義します。これは、基礎となる接続が消滅したときに通知します。

特定のトピックにメッセージを投稿し、別のルートでこのトピックからのメッセージを監視することに悩まされていると思います。このトピックに関するメッセージを読むと、DBからデータをリロードできるようにブローカが復旧したことがわかります。

または2.定期的なヒアビートメッセージをJMSトピックに投稿できます。あなたがそれらを受け取るのを止めるなら、あなたはブローカーが倒れたことを知っています。それらを再び取得し始めると、それがバックアップされており、DBからデータをリロードする必要があることがわかります。

+0

Mattさん、ありがとうございました。残念ながら、私たちは購読しているトピック(Tibco EMSブローカー)を所有しておらず、読み込み専用のアカウントに接続していますので、ハートビートのアプローチが少し難解です。 JMS例外はどこからスローされますか? JMSComponent自体、またはそこから消費されるルート? – Matt

+0

オプションのためにちょっと固まっているようですね!私は手を挙げることはできませんが、例外リスナーは接続に登録されているので、ルートのどこかからではなく接続によって例外がスローされるべきです。あなたの唯一の他の選択肢は、あなたが知らないメッセージがあるかどうかを定期的にIN_DBに問い合わせることですが、実用的ではないと思われます。 –

関連する問題