前言
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