总结:消息队列
一、为什么要使用消息队列? 1、 削峰 当有大并发产生的时候,数据会堆积在MQ中,消费端保持平稳的消费能力,不会给后端服务造成太大压力; 2、解耦 传统模式: 传统模式的缺点: 系统间耦合性太强,如上图所示,系统A在代码中直接调用系统B和系统C的代码,如果将来D系统接入,系统A还需要修改代码,过于麻烦! 中间件模式: 中间件模式的的优点: 将消息写入消息队列,需要消息的系统自己从消息队列中订阅,从而系统A不需要做任何修改。 3、异步 异步可以大大提高响应的速度; 二、使用消息队列的缺点? 1、一定程度上降低了系统的可用性 在不使用第三方组件的情况下,只有部署服务的机器挂了,进程才会出问题; 但是使用第三方消息队列,增加了一种宕机的可能,就是消息队列服务挂了也会导致进程出问题; 2、系统复杂性增加 代码复杂:需要引入第三方服务相关代码;本来只是一个方法调用而已。 需要考虑消息队列服务的一些问题, 如何保证消息不被重复消费?如何保证保证消息可靠传输? 三、消息队列的选型 来一个对比表: 特性 ActiveMQ RabbitMQ RocketMQ kafka 开发语言 java erlang java scala 单机吞吐量 万级 万级 10万级 10万级 时效性 ms级 us级 ms级 ms级以内 可用性 高(主从架构) 高(主从架构) 非常高(分布式架构) 非常高(分布式架构)