1、谈谈分布式事务问题
在单机环境下,事务是由JVM和数据库来保证的。但在分布式环境中,由于存在多个JVM,而锁只作用于自身存在的JVM,因此,分布式系统就会存在事务问题。
举个例子,在A服务执行事务的过程中,调用了B服务。然而,调完了B服务,后面的操作出现问题而抛异常了,于是,A服务由本地事务进行RollBack。因为A服务的本地事务无法作用于B服务,因此B服务正常执行的情况下,是无法进行RollBack,所以就会造成事务问题。
2、粗谈RocketMQ的事务性消息
(1)事务性消息的流程
- Producer开启事务
- Producer向RocketMQ中的broker发送Half Message,broker将它写入Half队列中,并保存到磁盘来实现持久化。
- broker向Producer发送确认消息。由于Producer可能会出现问题,这些问题可能是网络问题,也可能是Producer本地事务执行过长,或者其他因数。为了避免这一种情况发生,RockertMQ会定时的检查Producer的状态。
- Producer执行完本地事务后,就会向broker发送确认消息。如果Producer发生异常了,那么它就会进行RollBack,同时也会通知broker进行RollBack。
(2)谈谈broker持久化到磁盘的Half Message
Hlaf Message虽然被持久化到磁盘了,但是RocketMQ默认只保存三天。
网友评论