什么是消息隊(duì)列
消息(Message)是指在應(yīng)用間傳送的數(shù)據(jù)。消息可以非常簡(jiǎn)單,比如只包含文本字符串,也可以更復(fù)雜,可能包含嵌入對(duì)象。
消息隊(duì)列(Message Queue)是一種應(yīng)用間的通信方式,消息發(fā)送后可以立即返回,由消息系統(tǒng)來(lái)確保消息的可靠傳遞。消息發(fā)布者只管把消息發(fā)布到 MQ 中而不用管誰(shuí)來(lái)取,消息使用者只管從 MQ 中取消息而不管是誰(shuí)發(fā)布的。這樣發(fā)布者和使用者都不用知道對(duì)方的存在。
從上面的描述中可以看出消息隊(duì)列是一種應(yīng)用間的異步協(xié)作機(jī)制,那什么時(shí)候需要使用 MQ 呢?
以常見(jiàn)的訂單系統(tǒng)為例,用戶點(diǎn)擊【下單】按鈕之后的業(yè)務(wù)邏輯可能包括:扣減庫(kù)存、生成相應(yīng)單據(jù)、發(fā)紅包、發(fā)短信通知。在業(yè)務(wù)發(fā)展初期這些邏輯可能放在一起同步執(zhí)行,隨著業(yè)務(wù)的發(fā)展訂單量增長(zhǎng),需要提升系統(tǒng)服務(wù)的性能,這時(shí)可以將一些不需要立即生效的操作拆分出來(lái)異步執(zhí)行,比如發(fā)放紅包、發(fā)短信通知等。這種場(chǎng)景下就可以用 MQ ,在下單的主流程(比如扣減庫(kù)存、生成相應(yīng)單據(jù))完成之后發(fā)送一條消息到 MQ 讓主流程快速完結(jié),而由另外的單獨(dú)線程拉取MQ的消息(或者由 MQ 推送消息),當(dāng)發(fā)現(xiàn) MQ 中有發(fā)紅包或發(fā)短信之類的消息時(shí),執(zhí)行相應(yīng)的業(yè)務(wù)邏輯。
以上是用于業(yè)務(wù)解耦的情況,其它常見(jiàn)場(chǎng)景包括最終一致性、廣播、錯(cuò)峰流控等等。