消息队列 RocketMQ应用场景之分布式事务一致性是如何实现的?
注册系统注册的流程中,用户入口在网页注册系统,通知系统在邮件系统,两个 系统之间的数据需要保持最终一致。 普通消息处理 如上所述,注册系统和邮件通知系统之间通过消息队列进行异步处理。注册系统 将注册信息写入注册系统之后,发送一条注册成功的消息到消息队列 RocketMQ 版, 邮件通知系统订阅消息队列 RocketMQ 版的注册消息,做相应的业务处理,发送注 册成功或者失败的邮件。 流程说明如下: 1. 注册系统发起注册。 2. 注册系统向消息队列 RocketMQ 版发送注册消息成功与否的消息。 2.1 消息发送成功,进入 3。 2.2 消息发送失败,导致邮件通知系统未收到消息队列 RocketMQ 版发送 的注册成功与否的消息,而无法发送邮件,最终邮件通知系统和注册 系统之间的状态数据不一致。 3. 邮件通知系统收到消息队列 RocketMQ 版的注册成功消息。 4. 邮件通知系统发送注册成功邮件给用户。 在这样的情况下,虽然实现了系统间的解藕,上游系统不需要关心下游系统的业 务处理结果;但是数据一致性不好处理,如何保证邮件通知系统状态与注册系统状态 的最终一致。 流程说明如下: 1. 注册系统向消息队列 RocketMQ 版发送半事务消息。 1.1 半事务消息发送成功,进入 2。 1.2 半事务消息发送失败,注册系统不进行注册,流程结束。(最终注册系 统与邮件通知系统数据一致) 2. 注册系统开始注册。 2.1 注册成功,进入 3.1。 2.2 注册失败,进行 3.2。 3. 注册系统向消息队列 RocketMQ 版发送半消息状态。 3.1 提交半事务消息,产生注册成功消息,进入 4。 3.2 回滚半事务消息,未产生注册成功消息,流程结束。(最终注册系统与 邮件通知系统数据一致) 4. 邮件通知系统接收消息队列 RocketMQ 版的注册成功消息。 5. 邮件通知系统发送注册成功邮件。(最终注册系统与邮件通知系统数据一致)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
涵盖 RocketMQ、Kafka、RabbitMQ、MQTT、轻量消息队列(原MNS) 的消息队列产品体系,全系产品 Serverless 化。RocketMQ 一站式学习:https://rocketmq.io/