为什么使用消息队列
发布日期:2021-05-08 11:28:00 浏览次数:12 分类:精选文章

本文共 694 字,大约阅读时间需要 2 分钟。

使用消息队列主要保证以下场景:

  • 解耦
  • 异步
  • 削峰

解耦

假设 B、C、D 三个系统都依赖 A 系统某个数据,A 系统就需要考虑通过某种方式将这部分数据传递过去。传递的过程中还需要考虑数据丢失怎么办,下游系统挂掉怎么办等等问题,而实际上这部分功能实际不属于 A 系统本身的业务

在这种情况下,使用消息队列,A 系统只需将数据放到消息队列中,谁需要自己去申请消费即可,数据消费,新增依赖,取消依赖在下游系统自己处理,至于消息的安全性和稳定性交给消息队列即可

异步

假设 A 系统的某个功能还需要 B、C、D 三个子系统配合完成,具体过程为:

用户请求A系统接口 -> A系统处理 -> B、C、D系统处理 -> 结果返回

此时,用户需要等待 A 系统处理的时长 + B、C、D 系统处理的时长。使用消息队列,A 系统处理完毕后。发送 MQ,B、C、D 分别从 MQ 消费。此时用户就无需等候 B、C、D 系统处理,直接返回即可。

削峰

削峰是高并发场景下常常提到的概念,简单来说就是并发量很大时,削弱一部分。

举个例子:餐饮系统,每天只有饭点并发量大,平时系统稳定运行,到了饭点并发量一下涌进来,系统直接宕机。此时就可以考虑使用消息队列,将请求先保存起来,按照处理的速度,一点一点消费。


注意项

无论什么系统,引入的外部组件越多,越容易挂掉。消息队列包含以下缺点:

  • 降低系统可用性:消息队列不稳定时,系统更容易挂掉
  • 提高系统复杂度:多了一个组件,还需要考虑组件可能产生的问题,系统更复杂
  • 如何解决一致性问题:假如某个消息需要所有订阅者都处理成功才算成功,一部分处理成功,一部分处理失败,怎么办
上一篇:消息队列如何保证高可用
下一篇:常见消息队列对比

发表评论

最新留言

感谢大佬
[***.8.128.20]2025年04月13日 10时28分34秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章