目錄
- RocketMQ
- 1、什么是RocketMQ?
- 常用術語:
- 2、為什么需要消息隊列
- 3、什么是異步處理
- 4、什么是服務解耦
- 5、什么是流量控制
- 6、消息隊列兩種模型
- 隊列模型:
- 發布/訂閱模型:
- 總結:
- 7、怎么保證消息不丟失
- 8、如何處理消息被重復消費
- **出現消息重復的情況:**
- **解決方法:**
- 9、如何保證消息的有序性
- 全局有序
- 部分有序
- 10、如何處理消息堆積
- **1、業務邏輯處理:**
- **2、生產者producer限流**:限制發送消息的速度
- **3、水平擴容:**
- **問題:MQ積壓了幾百萬數據**
RocketMQ
1、什么是RocketMQ?
RocketMQ 是一個消息中間件,使用的數據存儲結構是隊列,隊列的特點是先進先出。消息隊列就是一個使用隊列來通信的組件。
常用術語:
RocketMQ(nameserver(broker(topic(MessageQueue(msg
Message: msg 消息
Message Queue: 消息存儲的隊列,可以有很多個消息隊列,這些消息隊列是存在broker里面的。
topic: 由一個或多個消息隊列Message Queue 隊列組成,為了做業務上的分類。
tag: 標簽,對msg打個標簽
broker: 這些消息隊列肯定會保存在某一臺生產服務器上,而這臺生產服務器我們就稱為 broker
nameserver: 服務注冊中心(就是各個服務的節點信息注冊到這個注冊中心里面)
發送消息的是生產者producer,
接收消費消息的為消費者consumer,
消息隊列服務端為broker。
消息從producer發往broker,broker將消息存儲到本地,然后consumer從broker拉取消息,或者broker推送消息至consumer,最后消費。
為了提高并發度,
2、為什么需要消息隊列
因為隨著業務不斷擴張,從之前的單體架構到現在的微服務架構,成百上千的服務之間的相互調用和依賴,我們需要一個東西來解耦各個服務之間的關系,控制資源合理的使用以及緩沖流量洪峰等等。
這個時候消息隊列就應運而生。它常用來實現:異步處理、服務解耦、流量控制。
3、什么是異步處理
隨著業務的發展,項目的請求鏈路會越來越長。比如之前的簡單的查庫存、下單,到后面的加上積分服務、短信服務等,這一路同步調用下來,客戶可能就等著急了,這個時候就可以使用消息隊列來進行異步處理。
調用鏈路長,響應就會變慢,對于一些不需要那么及時的功能,比如短信或者加積分之類的,只需要在下單結束后,扔個消息到消息隊列中就可以直接返回響應了。積分服務和短信服務可以并行的消費這條消息。
優點:消息隊列的異步處理可以減少請求的等待時間,還能讓服務異步