2017-11-13 6 views
0

トランザクションSimpleMessageListenerContainerを使用するspring-amqpコンシューマがあります。コンテナに設定されたTransactionManagerは、RabbitTransactionManagerです。 My MessageListenerは@Transactionalアノテーションを持つサービスメソッドを呼び出します。春には私のリポジトリとサービスに使う予定のBean宣言の@Primaryアノテーションを持つHibernateTransactionManagerがあります。上記の場合にはSpring Amqp HibernateとRabbit Transaction Manager

私の質問

は、HibernateTransactionManagerは私のMessageListener内で行われ、サービスメソッドの呼び出しに慣れるでしょうか?

なぜ私はいくつかのデータを永続化されませんでした私たちのシステムにバグを調査していると私は、障害のあるトランザクションマネージャーの設定を排除しようとしている

を求めています。私はそれが私は、データベースのロールバックが発生した場合に、メッセージが再キューイング持つことを好むだろう

を働きたいどのよう

。私は単にRabbitTransactionManagerを削除して代わりにHibernateTransactionManagerを使うことができますか?

私が尋ねていることについて何か混乱がある場合は、私の春の構成を提供してもよろしいですか?

答えて

0

もしあなたが完全に吹き飛ばされたのであれば、PlatformTransactionManagerをSpring AMQP MessageListenerContainerにも使用してください。

RabbitMQはJMSのようなトランザクションをサポートしていないため、RabbitTransactionManagerは必須ではなく、既存のトランザクションリソースサポートに置き換える必要があります。

Spring AMQPコンポーネントは、トランザクション同期に適切に参加しています。

https://docs.spring.io/spring-amqp/docs/2.0.0.RELEASE/reference/html/_reference.html#_using_the_rabbittransactionmanager

+0

素晴らしい!解明してくれてありがとう! –

関連する問題