前言
MQ(Message Queue)
消息队列
MQ的适用场景
- 异步处理
把一些耗时但不阻塞主流程的业务让MQ去做业务处理,提升用户体验
- 流量削峰填谷
秒杀场景,利用MQ控制流量,一旦超出阈值就丢弃请求或弹出错误页,防止应用被洪峰打死
- 解耦微服务
A服务调用B服务,B挂了,A的接口也无法正常返回,即使有Sentinel可以保护A不被B拖死,但接口依然无法正常返回,使用MQ后演变成A生产消息到MQ,B去消费MQ,即使B挂了,MQ依然会把消息存储起来,对A不会产生任何影响,B服务恢复正常后再去消费MQ的消息
MQ的选择
- 目前常用的主流的消息中间件:
ActiveMQ
、RabbitMQ
,Kafka
,RocketMQ
-
RocketMQ
有一篇官方对比文档:RocketMQ vs. ActiveMQ vs. Kafka
MQ的术语和概念
术语/概念 | 子项 | 解释 | 描述 |
---|---|---|---|
Topic主题 | - | 消息的集合 | 一类消息的集合,RocketMQ的基本订阅单位 |
消息模型 | Producer | 生产者 | 生产消息 |
Broker | 消息代理 | 存储消息,转发消息 | |
Consumer | 消费者 | 消费消息 | |
部署结构 | Name Server | 名字服务 | 生产者/消费者通过名字服务查找个主题相应的Broker IP列表 |
Borker Server | 代理服务器 | 消息中转角色,负责存储消息、转发消息 | |
消费模式 | Pull Consumer | 拉取式消费 | 应用调用Consumer的拉取信息方法从Broker Server拉取消息 |
Push Consumer | 推动式消费 | Broker收到消息后主动推送给消费者,实时性较高 | |
Group组 | Producer Group | 生产者组 | 同一类Producer的集合 |
Consumer Group | 消费者组 | 同一类Consumer的集合 | |
消息传播模式 | Clustering | 集群 | 相同Consumer Group的每个Consumer实例平均分摊消息 |
Broadcasting | 广播 | 相同Consumer Group的每个Consumer实例都接收全量的消息 | |
消息类型 | 普通消息、 顺序消息、 定时/延时消息、 事务消息 |
- | - |
MQ的搭建导航
RocketMQ
Windows下安装RocketMQ
RabbitMQ
Windows下安装RabbitMQ
Linux下安装RabbitMQ