2016-11-07 8 views
1

私は、エンドポイントとエンドポイントがjmsであるラクダルートを持っています。 また、エラー処理がONになっています。apache camelでJMSルートを使用している場合、トランザクションクライアントとtransacted = trueの違いは何ですか?

今、私はこのメッセージ処理をjmsトランザクションハンドラで保護したいと考えています。そのために私は2つのオプションがあります。

  1. をどちらのhere
  2. それともhere

二つの違いは何ですかを示すようtransacted=trueを使用するJMSエンドポイントを設定示すように使用するようにルートを設定?どの方が優れているのか、どちらを使うべきか誰にでも教えていただけますか?

答えて

2

this(Claus Ibsenの答えを参照)<transacted>によれば、Camel処理はTXコンテキスト内で確実に実行されます。それがないと、TXコンテキストはブローカのためだけであり(同じJMSセッションからの同じ作業単位内でのみ)。 transacted=trueは、メッセージのトランザクション消費を可能にします。あなたが実際に(HTTPエンドポイントからのかかる)<transacted>を使用したいと思う場所のそこ例もあります:

from jetty:http 
transacted 
to jms 
to file 

だから、あなただけのsthe同じブローカーに別のJMSエンドポイントからのメッセージを渡している場合は、あなたのように思えます実際に取引ルートは必要ありません。

+1

ルートを「トランザクション済み」としてマークすると、そのルートで使用する他のすべてのトランザクションリソースがトランザクションによってラップされます。あなたが行う可能性のあるデータベース書き込み。 'transacted = true'を使用すると、トランザクションはその単一エンドポイントのJMSコンポーネントのみをラップします。 –

関連する問題