1.什么是MQ
MQ(Message Queue)消息队列,是基础数据结构中“先进先出”的一种数据结构。指把要传输的数据(消息)放在队列中,用队列机制来实现消息传递——生产者产生消息并把消息放入队列,然后由消费者去处理。消费者可以到指定队列拉取消息,或者订阅相应的队列,由MQ服务端给其推送消息。
2.为什么要用MQ
1 解耦
2 异步
3 削峰
通过以上流程图大家很容易知道MQ的好处,但是使用了MQ也有坏处,是把双刃剑。
3.MQ的缺点
1、系统可用性降低。依赖服务也多,服务越容易挂掉。需要考虑MQ瘫痪的情况。
2、系统复杂性提高。需要考虑消息丢失、消息重复消费、消息传递的顺序性。
3、业务一致性。主业务和从属业务一致性的处理
4.MQ分类
市面上常见的mq有ActiveMQ,RocketMQ,Kafka,RabbitMQ,下面来对比下各个的优缺点:
| ActiveMQ | RocketMQ | Kafka | RabbitMQ | |
|---|---|---|---|---|
| 开发语言 | Java | Java | Scala/Java | Erlang |
| 单机吞吐量 | 万级 | 十万级 | 十万级 | 万级 |
| 成熟度 | 成熟 | 开源版本不够成熟 | 比较成熟 | 成熟 |
| 持久化 | 支持少量堆积 | 支持少量堆积 | 支持大量堆积 | 支持大量堆积 |
| 顺序消息 | 不支持 | 支持 | 支持 | 不支持 |
| 性能稳定性 | 好 | 一般 | 较差 | 好 |
| 集群方式 | 支持简单集群 | 支持简单集群 | 多master-slave模式 | 天然支持分布式集群 |
| 管理页面 | 一般 | 较好 | 无(需要借助第三方插件) | 一般 |
| 维护者 | apache | Mozilla/Spring | apache | alibaba |
5.MQ的选择
1.kafka
主要特点是基于pull模式来处理消息,追求高吞吐量,一开始的初衷就是用于日志收集和传输,适合产生大量数据的互联网服务的收集行为业务。大型公司建议使用,如果有日志采集功能,首选kafka。
2.RocketMQ
RocketMQ天生为金融互联网领域而生, 对于可靠性要求很高的场景.是alibaba研发的中间件,在阿里双十一经历了多次考验,有电商业务大流量业务,可以首选RocketMQ。
3.RabbitMQ
由于RabbitMQ主要是用erlang语言开发的,本身有着天然的并发优势,性能极好,社区活跃度很高,管理页面使用起来十分方便,如果数据量不是很大,中小型公司优先选择RabbitMQ.
4.ActiveMQ
由于ActiveMQ是早期MQ的鼻祖,但是相对企业用的不多了,社区更新缓慢,没有经过大规模吞吐量的场景验证,一般很少使用此中间件。
6.后续预告
咱们将主要介绍RabbitMQ消息中间件核心部分,敬请期待。
欢迎关注我的公众号来一起学习,微信公众号不再提供留言功能,有问题的话可以直接在输入框回复。