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