Saya memiliki konsumen spring-amqp menggunakan SimpleMessageListenerContainer transaksional. Set TransactionManager pada wadah adalah RabbitTransactionManager. MessageListener saya memanggil metode layanan yang memiliki anotasi @Transactional. Di musim semi saya memiliki HibernateTransactionManager dengan anotasi @Primary pada deklarasi kacang yang ingin saya gunakan untuk repositori dan layanan saya.

Pertanyaan Saya

Dalam kasus yang dijelaskan di atas, apakah HibernateTransactionManager digunakan untuk panggilan metode layanan yang terjadi dalam MessageListener saya?

Mengapa saya bertanya

Saya sedang menyelidiki bug dengan sistem kami di mana beberapa data tidak bertahan dan saya mencoba untuk mengesampingkan konfigurasi TransactionManager yang salah.

Bagaimana saya ingin ini bekerja

Saya lebih suka pesannya di-requeued jika terjadi rollback database. Bisakah saya menghapus RabbitTransactionManager sama sekali dan menggunakan HibernateTransactionManager sebagai gantinya?

Saya akan dengan senang hati memberikan konfigurasi pegas saya jika ada kebingungan tentang apa yang saya minta.

0
Josh Chappelle 13 November 2017, 20:11

1 menjawab

Jawaban Terbaik

Benar, jika Anda telah sepenuhnya meledak PlatformTransactionManager, Anda harus menggunakannya untuk Spring AMQP MessageListenerContainer juga.

Karena RabbitMQ tidak mendukung transaksi dalam sifatnya seperti JMS, RabbitTransactionManager tidak diperlukan dan harus diganti dengan dukungan sumber daya transaksional yang ada.

Komponen Spring AMQP berpartisipasi dalam sinkronisasi transaksi dengan benar.

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

0
Artem Bilan 13 November 2017, 18:06