MQ的使用场景
  • 异步化缓冲(最终一致性,柔性事务)

服务解耦

假设A系统发送数据到B、C、D三个系统,如果是选择接口调用发送

  • 若E系统也要这个数据
  • C系统现在不要了
  • 现在A系统又要发送第二种数据了

A系统负责人头秃中。。。A系统还要时刻考虑B、C、D、E四个系统若挂了咋办?我要不要重发?我要不要把消息存起来?

你的业务是否有有类似场景呢?
一个系统或模块,调用了多个系统或模块,互相调用很复杂,维护繁琐。 但其实这个调用是不需要直接同步调用接口的,若用MQ,可以考虑在你的项目里,使用MQ将其异步化解耦。

  • 甚至 redis 也可以
    消息队列技术选型_解耦

异步

消息队列技术选型_解耦_02

削峰

每天3点到9点,A系统风平浪静,每秒并发请求数量就100。结果每次一到11点~3点,每秒并发请求数量突然会暴增到1w。但系统最大处理能力就只能是每秒处理1000个请求。

MQ的优缺点

系统可用性降低

系统引入的外部依赖越多,越容易挂掉,本来你就是A系统调用B、C、D三个系统的接口就好了,ABCD四个系统好好的,没啥问题
你加个MQ进来,万一MQ挂了咋整?MQ挂了,整套系统崩溃了,不就完了。

系统复杂性提高

硬生生加个MQ进来

  • 你怎么保证消息没有重复消费?
  • 怎么处理消息丢失的情况?
  • 怎么保证消息传递的顺序性?

一致性问题:A系统处理完了直接返回成功了,人都以为你这个请求就成功了;但是问题是,要是BCD三个系统那里,BD两个系统写库成功了,结果C系统写库失败了,咋整?你这数据就不一致了。

所以MQ实际是一种非常复杂的架构,你引入它有很多好处,但是也得针对它带来的坏处做各种额外的技术方案和架构来规避掉,最好之后,你会发现,妈呀,系统复杂度提升了一个数量级。但关键时刻,用还是得用。