3

我在整个互联网上都听说 rabbitMQ 不支持事务。

现在,也就是说,spring 框架为我们提供了一个兔子事务管理器:

这是其定义的片段:

<bean id="rabbitTransactionManager"
    class="org.springframework.amqp.rabbit.transaction.RabbitTransactionManager">
    <property name="connectionFactory" ref="connectionFactory" />
</bean>

所以我的问题是:

1)在带有事务管理器的方法上使用@transactional注解实际上可以保证事务效果吗?2)spring是如何在rabbit非跨国的情况下实现交易的?

4

1 回答 1

3

Rabbit 确实支持本地事务。例如,在事务中,如果您的消费者发生了某些事情,并且无法处理接收到的消息,则该消息将被发送回代理并且不会被消费。

与其他代理(例如大多数基于 JMS 的代理)不同的是,Rabbit 不支持分布式事务(XA 事务)。这意味着在通过 Rabbit 发送消息并将某些数据持久保存在数据库中时,您不能拥有相同的事务。

于 2014-10-28T09:53:10.800 回答