RocketMQ 事务型消息
事务型消息为了保证最终一致性(就是本地执行的事务与消费者的消费操作保持原子性)会用到两阶段提交,这里就简单记录下其中的过程。
图解:生产者(Preducer
)、消费者(Consumer
)、代理服务器(Broker
,因为 Broker
会有 Name Server
来绑定,所以这里就简称MQ Server
)和 数据库 MySQL
。
两阶提交段步骤:
- 首先,生产者会发送一个半成品消息给代理(不让消费者去消费),然后代理会给消费者返回一个 OK 。
- 本地执行事务,生产者这时就会访问
MySQL
执行一个事务。 - 如果本地事务执行成功了,生产者就会告诉代理让消费者可以去消费了;如果本地事务执行失败了,生产者就会告诉代理回滚不让消费者感知到。
- 如果上述第三步失败了(即生产者通知代理由于一些原因没通知到),而本地事务执行成功了。这时代理因为只收到了一个半成品消息,却久久没收到通知,它这时就会有一个回查机制自动去核查(每隔一段时间去查一下,并且间隔时间会越来越大)。
- 生产者收到代理通知的核查后,它就会去检查数据库刚才的数