事务消息与数据库的事务类似,只是MQ中的消息是要保证消息是否会全部发送成功,防止丢失消息的一种策略。
RabbitMQ有两种方式来解决这个问题:
1.通过AMQP提供的事务机制实现;
2.使用发送者确认模式实现;
两者应用场景:
1.事务功能场景:当需要发送多条消息时,第1条消息发送成功,后面的消息因为逻辑异常等原因发送失败,需要回滚,那么就需要使用到RabbitMQ的事务。
2.事务业务场景:要么全部成功、要么全部失败的场景
3.发送者确认模式业务场景:需要发送10条消息,前面9条成功,也许服务器down机后面1条失败,这时候需要补发,那么就建议使用 发送者确认模式。
事务的实现主要是对信道(Channel)的设置,接口的主要的方法有三个:
1.channel.txSelect()声明启动事务模式;
2.channel.txCommint()提交事务;
3.channel.txRollback()回滚事务;
如果我们条用 txSelect()方法启动事务,那么我们必须调用事务的提交,否则消息不会真正的写入队列,提交时会讲内存中的消息写入队列并释放内存
真实案例使用:



