侦听RabbitMQ,从队列1接收消息,处理并将消息发布到队列2 -可能在一个Spring AMQP事务中?

06odsfpq  于 2023-08-05  发布在  RabbitMQ
关注(0)|答案(1)|浏览(130)

Spring AMQP文档中关于transaction的内容并不清楚是否可以在一个transaction中完成所有事情:监听RabbitMQ,从队列1接收消息,进行处理(包括持久化)并将消息发布到队列2。如果这些步骤中的任何一个失败,事务中的所有操作都会回滚(包括数据库事务回滚、发布到队列2时的回滚以及从队列1接收时的回滚-重新排队)。这可以工作吗?如何在代码中实现?例如,我们使队列1的侦听器成为事务性的,并从该侦听器对队列2进行数据处理和发布?
此交易能否提供一次交货保证?

qvk1mo1f

qvk1mo1f1#

参见https://docs.spring.io/spring-amqp/docs/current/reference/html/#transactions
只要侦听器容器和模板是事务性的,工作就将在一个事务中执行。
您还可以与它同步数据库事务;然而,它不是原子(XA),而是“尽力而为1 PC”。参见https://www.infoworld.com/article/2077963/distributed-transactions-in-spring--with-and-without-xa.html
不可能;确切地说一次是不可能的,它至少是一次;您将不得不处理可能的重复。

相关问题