消息队列 RocketMQ应用场景之异步解耦是如何实现的?
传统处理 最常见的一个场景是用户注册后,需要发送注册邮件和短信通知,以告知用户注 册成功。传统的做法有以下两种: (1)串行方式 串行方式下的注册流程如下图所示。 数据流动如下所述: ● 用户在注册页面填写账号和密码并提交注册信息,这些注册信息首先会被写入 注册系统成功。 ● 注册信息写入注册系统成功后,再发送请求至邮件通知系统。邮件通知系统收 到请求后向用户发送邮件通知。 ● 邮件通知系统接收注册系统请求后再向下游的短信通知系统发送请求。短信通 知系统收到请求后向用户发送短信通知。 以上三个任务全部完成后,才返回注册结果到客户端,用户才能使用账号登录。 假设每个任务耗时分别为 50 ms,则用户需要在注册页面等待总共需要 150 ms 才能登录。 (2)并行方式 并行方式下的注册流程如下图所示。 数据流动如下所述: ● 用户在注册页面填写账号和密码并提交注册信息,这些注册信息首先会被写入 注册系统成功。 ● 注册信息写入注册系统成功后,再同时发送请求至邮件和短信通知系统。邮件 和短信通知系统收到请求后分别向用户发送邮件和短信通知。 以上两个任务全部完成后,才返回注册结果到客户端,用户才能使用账号登录。 假设每个任务耗时分别为 50 ms,其中,邮件和短信通知并行完成,则用户需 要在注册页面等待总共需要 100 ms 才能登录。 以下就注册场景中使用了消息队列 RocketMQ 版的效果进行说明。 异步解耦 对于用户来说,注册功能实际只需要注册系统存储用户的账户信息后,该用户便 可以登录,后续的注册短信和邮件不是即时需要关注的步骤。 对于注册系统而言,发送注册成功的短信和邮件通知并不一定要绑定在一起同步 完成,所以实际当数据写入注册系统后,注册系统就可以把其他的操作放入对应的消 息队列 RocketMQ 版中然后马上返回用户结果,由消息队列 RocketMQ 版异步地 进行这些操作。 数据流动如下所述: ● 用户在注册页面填写账号和密码并提交注册信息,这些注册信息首先会被写入 注册系统成功。 ● 注册信息写入注册系统成功后,再发送消息至消息队列 RocketMQ 版。消息 队列 RocketMQ 版会马上返回响应给注册系统,注册完成。用户可立即登录。 ● 下游的邮件和短信通知系统订阅消息队列 RocketMQ 版的此类注册请求消息, 即可向用户发送邮件和短信通知,完成所有的注册流程。 用户只需在注册页面等待注册数据写入注册系统和消息队列 RocketMQ 版的时 间,即等待 55 ms 即可登录。 异步解耦是消息队列 RocketMQ 版的主要特点,主要目的是减少请求响应时间和 解耦。主要的适用场景就是将比较耗时而且不需要即时(同步)返回结果的操作作为消 息放入消息队列。同时,由于使用了消息队列 RocketMQ 版,只要保证消息格式不 变,消息的发送方和接收方并不需要彼此联系,也不需要受对方的影响,即解耦和。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
涵盖 RocketMQ、Kafka、RabbitMQ、MQTT、轻量消息队列(原MNS) 的消息队列产品体系,全系产品 Serverless 化。RocketMQ 一站式学习:https://rocketmq.io/