1.写在前面
本人是一枚编程小白,该文章内容是经过大量的资料翻阅,以本人的理解进行一个讲解。我会尽可能的说的很明白,如果您认为我理解的有问题,欢迎评论区留言,万分感谢。
2.什么是消息队列?
消息队列也就是我们说的MQ,他是一个可独立部署的中间件产品。消息,顾名思义就是发送出来的信息,队列,大家学过一点数据结构应该就会很清楚队列是什么,在这里给大家打一个比方。一根管子你从管子的一头放乒乓球,先放进去的一定是先从另一头出来的,所以队列有个特点是“先进先出”。简单来说:系统A发送消息给MQ,系统B再从MQ中读取消息。
3.消息队列有什么作用?
解耦,异步,削峰
这三个作用大家如果想要详细了解,可以直接去查一下,网上资源很多。为了方便大家之后的理解我在这里简单说明一下。
解耦:
比如:现在系统A产生了一条数据需要推送给系统B,我可以直接远程调用系统B的接口,将这条数据推送给系统B。但是现在系统C也需要这条数据,然后我再远程调用系统C的接口,将这条数据推送给他。现在系统D也有这个需求了...大家有没有发现这样是不是很麻烦,因为以后可能还有很多系统需要这条数据,你就得不断地去更新升级代码。
现在,有了MQ我们可以怎么做,系统A产生数据后发送给MQ,刚才也说了MQ是一个中间件,系统B,系统C可以直接从MQ中取这条数据,包括以后有新的系统需要这条数据,系统A也不需要做更新升级。
异步:
比如:系统A在推送这条数据的时候,必须先推给系统B,在推给系统C,在推给系统D,这样增加了耗时,增加了时间复杂度。可能大家会想到用线程去推送,因为线程可以并发的去推送,可以实现推送给B,C,D同步执行,但是这只是3系统,不保证后面会有很多系统有这种需求,因此这种方式会占用很多线程,增加了空间复杂度。(我不确定时间复杂度与空间复杂度的概念我应用的是否准确,欢迎大家留言。)
现在,系统A把消息交给MQ之后他就可以继续往下执行了,其它系统去获取消息只需从MQ中拿就行了。在这边接着给大家讲一个概念,生产者和消费者。生产者就是产生消息的那一方,就是目前的系统A,消费者就是消费消息的一方就是系统B,C,D。
削峰:
比如:系统A现在是一个电商系统,在双11的时候这种数据是很大的,一秒钟会有大量的数据去请求数据库进行写库,而数据库一定是有上限的,这个时候数据库就很容易崩,而且崩了会很麻烦。
现在,系统A还是正常的操作,只不过他不进行写库操作,而是将数据通过消息发送给MQ,这些消息由系统B来慢慢进行消费,将写库的峰值变得平缓。以保证数据库不会一下子崩掉。
4.MQ选型
MQ包括:ActiveMQ、RocketMQ、RabbitMQ、Kafka等
这些都称为MQ,至于他们之间的区别我就不给大家讲解了,大家随便一查资料就可以查到,而且,真正开发的时候选用什么MQ也不是你我说的算的,这是要经过谨慎的推敲才能定夺。

最低0.47元/天 解锁文章
2101

被折叠的 条评论
为什么被折叠?



