消息队列的作用 | 青训营笔记

98 阅读2分钟

之前在自己的项目中用到Kafka、RocketMQ等消息队列,仅仅用于系统消息通知,RocketMQ作为代理人的作用,但是一直不知道消息队列是怎么个解耦法?

系统崩溃

先看一个生活中的场景,小明想买一台游戏机,正好抖音直播间搞活动,于是搜索自己想要的游戏机,点击商品浏览价格。

image.png

首先,请求会先到搜索商品这个服务上,并记录搜索行为,点击商品的时候,又记录了我们的点击商品,这些数据最终都会通过计算分析,为的是下一次推送更准确的信息。

而小明的搜索行为记录和点击行为记录可以记录在存储日志中。

但是,但是,如果负责记录存储的数据库挂了,这个流程就会崩溃。

解耦

首先我们来分析一下系统为什么会崩溃?

因为存储服务挂了。这一个挂了,整个搜索商品->点击商品的流程都会受到影响。说白了,就是耦合度太高。

所以我们要解耦。用什么来解耦?

你猜猜什么中间件的作用是解耦?

消息队列登场。

image.png

消息队列可以看成一个中间人,把获取到的这些记录都推送到存储服务中。存储服务挂了、日志没有了、服务器坏掉了。但是还好,我们有消息队列,只要消息队列没挂,整个系统依然能照常运行,也依然能知道用户信息和系统信息。

是的,消息队列还适用于日志存储。

服务能力有限

再来看一个案例,就是秒杀商品,同一秒可能有几千个用户在抢购,但是订单只能同时处理10个请求,面对庞大的请求量,订单该如何处理?

解决方案:用消息队列削峰。每次只获取10个请求处理。