消息隊列簡介

什麼是消息隊列(Message Queue)?

消息隊列,又叫做消息中間件。是指用高效可靠的消息傳遞機制進行與平臺無關的數據交流,並基於數據通信來進行分佈式系統的集成。通過提供消息傳遞和消息隊列模型,可以在分佈式環境下擴展進程的通信。

MQ的幾個主要特點

1. 是一個獨立運行的服務。生產者發送消息,消費者接收消費,需要先跟服務器建立連接。

2. 採用隊列作爲數據結構,有先進先出的特點。

3. 具有發佈訂閱的模型,消費者可以獲取自己需要的消息。

爲什麼要用MQ?

1. 實現異步通信

例如銀行轉賬這種調用鏈路比較長的業務,一般都會藉助MQ實現異步通信,減少同步的阻塞時間。

2. 實現系統解耦

在分佈式系統中,當一個業務流程涉及多個系統的時候,系統之間就會形成一個依賴關係。

整個流程從下單開始到發通知結束,都是串行過程,中間有一步出現問題,流程都會終止,如果支付失敗,還要考慮庫存與訂單的回滾操作,來保證數據的一致性。

然而流程中的每一步其實都是相對獨立的,不存在順序問題,只要保證每個步驟最終成功,就可以實現流程的閉環。

引入MQ:

訂單系統只需要把下單的消息發送到消息隊列上,由各個下游的業務系統自己創建隊列,然後監聽隊列消費消息。每個系統只需要與消息隊列交互,降低了系統間的耦合,同時消息的可靠性也可以由消息中間件的特性來保障。

3.實現流量削峯

當電商系統在舉辦雙十一、618這一類的促銷活動時,必須要考慮一瞬間流量達到頂峯的情況,爲了解決這個問題,可以引入MQ。

MQ具有FIFO的特性,流量頂峯的場景下,可以先用MQ把所有流量承接下來,轉換成消息發送到消息隊列服務器上,業務層就可以根據自己的消費速率去處理這些消息,處理之後再返回結果。就像我們在火車站排隊一樣,大家只能一個一個買票,不會因爲人多就導致售票員忙不過來。

引入消息隊列會帶來哪些問題?

系統可用性降低:原來是兩個節點的通信,現在還需要獨立運行一個服務,如果MQ服務器或者通信網絡出現問題,就會導致請求失敗。

系統複雜性提高:爲什麼說複雜?第一,必須要理解相關的模型和概念,才能正確地配置和使用MQ。第二,使用MQ發送消息必須要考慮消息丟失和消息重複消費的問題。一旦消息沒有被正確地消費,就會帶來數據一致性的問題。

所以,引入MQ要結合實際業務場景,不能盲目引入。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章