1. MQ 是什么?
在互聯網中,會經常使用 MQ 來作為消息通信服務,我們一起來看一下什么是 MQ 吧!
1.1 MQ 本質
【MQ】(Message queue),消息隊列,字面意思來看,本質是一個隊列,FIFO先進先出,但這里的消息隊列,只不過隊列中存放的是消息,消息可以非常簡單,也可以非常復雜
1.2 系統間通信
MQ?多用于分布式系統之間進行通信(系統通信,相當于數據傳輸)
這里補充介紹一下,系統之間的調用通常有兩種方式:
-
同步通信:直接調用對方的服務,數據從一端發出后立即就可以到達另一端
-
異步通信:數據從一端發出后,先進入一個容器進行臨時存儲,當達到某種條件后,再由這個容器發送給另一端(這個容器的一個具體實現就是MQ)
2. MQ的作用是什么?
MQ 的工作是:接收并轉發消息
可以把 MQ 消息隊列想象成一個倉庫,采購部門進貨之后,把貨物放在倉庫里,生產部門從倉庫中取出零件,并加工成產品,這樣類比,可能更幫助我們理解,倉庫放的是物品, MQ 放的是消息,倉庫負責存儲物品,并轉發物品,同樣的,MQ 負責存儲和轉發消息
2.1 異步解耦
在一些業務流程中,一些操作可能會非常耗時,但并不需要即時返回結果,可以借助 MQ 把這些操作異步化(可回顧這期內容,介紹了解耦等名詞【多線程】阻塞隊列,解耦,就是依賴關系減弱)
舉一個栗子,比如在用戶注冊的使用,有以下三個事情需要做:
1)用戶信息校驗
2)插入數據庫(其實這個操作,用戶的數據就已經在數據庫了)
3)發送郵件(告訴用戶,比如,恭喜你,注冊成功等類似信息)
2.2 流量削峰
在訪問量劇增的情況下,應用仍然需要繼續發揮作用,但是這樣的突發流量并不常見,如果以能處理這類峰值為標準而投入資源,這無疑是巨大的資源浪費,使用 MQ 能夠使關鍵組件支撐突發訪問壓力,不會因為突發流量而崩潰,比如秒殺活動或者促銷活動,可以使用 MQ 來控制流量,將請求排隊,系統再根據自己的處理能力逐步處理這些請求,使請求是平緩的速度,而不是猛增猛降
2.3 消息分發
當多個系統需要對同一數據做出響應的時候,可以使用 MQ 進行消息分發,比如支付成功之后,支付系統可以向 MQ 發送消息,其它系統訂閱該消息,而不需要輪詢數據庫
舉一個栗子,比如在購物的時候,下單成功,有以下幾個事情需要做:
1)向商家發送通知
2)向平臺財務部門發送通知
2.4 延遲通知
需要在特定時間后發送通知的場景中,可以使用 MQ 的延遲消息功能,比如,在電子商務平臺中,如果用戶下單后一定時間內未支付,可以使用延遲隊列在超時后自動取消訂單(可以把 MQ 想象一個倉庫,暫時存儲了這些消息,到一定時候進行轉發~)
2.5 日志處理
MQ 消息隊列還可以用于日志處理,例如,Kafka?等消息隊列中間件可以接收并存儲大量的日志數據,供日志處理應用進行訂閱和消費,通過這種方式可以簡化日志處理的架構,提高日志處理的效率和可靠性
3. 為什么選擇 RabbitMQ?
RabbitMQ的綜合能力較強,并且我們的項目沒有那么那么大的高并發,RabbitMQ 社區比較活躍,同時RabbiMQ 管理界面友好,因此,本專欄學習 MQ 選擇了 RabbitMQ ,小伙伴們~接下來我們主要一起來學習RabbitMQ的使用。
4. RabbitMQ 是什么?
可以通過?RabbitMQ 官網,更進一步了解
RabbitMQ 是采用?Erlang?語言實現AMQP(Advanced Message Queuing Protocol)高級消息隊列協的消息中間件,它最初起源于金融系統領域,為了在分布式系統中存儲和轉發消息設計的~
💛💛💛本期內容回顧💛💛💛