MQ-消息隊列的兩種模式

什麼是MQ

MQ即消息隊列。消息隊列的含義是生產者與消費者通信時,把要傳輸的數據放到隊列中。它被廣泛應用在異步通信的領域中。
舉個栗子:

老師希望學生多讀書,經常給學生看一些好書,原來的方式是這樣:老師需要等待學生課間的時候,把書給學生送去,並親眼監督學生讀完書才走。久而久之,老師和學生都覺得麻煩。
後來演進成:老師對學生說「我放到書架上的書你都要看」,然後老師每次發現不錯的書都放到書架上,學生看到書架上有書就拿下來看。
此時的書架就是一個消息隊列,老師是生產者,學生是消費者。

好處:

  1. 老師想給學生書的時候,不必看學生是否有空,老師只需要把書放到書架上就行了。這樣雙方時間都更自由。

  2. 不必親眼觀察學生的讀書過程,節省時間。

  3. 如果有一天另一個學生也想一起看書,老師只需要把書放到書架上,不同的學生從書架上取書即可

  4. 書架上的書放在那裏,學生閱讀速度快就早點看完,閱讀速度慢就晚點看完,沒關係,所以學生(消費者)壓力會小一些。

推理出:MQ主要的使用場景就是將比較耗時而且不需要即時(同步)返回結果的操作作爲消息放入消息隊列。同時由於使用了消息隊列,消息的發送方和接收方並不需要彼此聯繫,也不需要受對方的影響,即解耦和。

MQ的好處

1.解耦

每個成員不必受其他成員影響,可以更獨立自主,只通過一個簡單的中間件來聯繫。
栗子:
老師可以不知道從書架上取書的是誰,學生也可以不知道往書架上放書的人是誰,在他們眼裏,都只有書架,沒有對方。

2.提高效率

老師「把書放到書架上,別的我不問」,爲自己節省了大量時間。不需要花費額外時間監督

3.異步

很多時候,用戶不想也不需要立即處理消息。消息隊列提供了異步處理機制,把一個消息放入隊列,但並不立即處理它。

4.削峯

假設學生讀書很慢,如果採用監督讀完的方式,兩人都會有困擾
如果老師1天連給了五本,之後隔三個月才又給一本,那學生只要在三個月內從書架上陸續取走五本書讀完就行了,而不是連續給5本,就要一口氣看完。
使用MQ能夠使關鍵組件頂住突發的訪問壓力,而不會因爲突發的超負荷的請求而完全崩潰

5.可恢復性

系統的一部分組件失效時,不會影響到整個系統。MQ降低了進程間的耦合度,所以即使一個處理消息的進程掛掉,加入隊列中的消息仍然可以在系統恢復後被處理。

6.順序保證

在大多使用場景下,數據處理的順序都很重要。大部分MQ本來就是排序的,並且能保證數據會按照特定的順序來處理。Kafka保證一個Partition內的消息的有序性。

7.緩衝

消息隊列通過一個緩衝層來幫助任務最高效率的執行———寫入隊列的處理會盡可能的快速。該緩衝有助於控制和優化數據流經過系統的速度。

消息隊列的兩種模式

點對點模式

(一對一,消費者主動從消息隊列中拉取數據,消息收到後清除消息隊列中對應內容)
對一個消息而言,只會被一個消費者消費
在這裏插入圖片描述

發佈/訂閱模式

(一對多,消費者消費數據之後不會清除消息隊列中的數據)
一個消息可能會被多個消費者消費

在這裏插入圖片描述

異步和同步

同步消息:
老師給學生書, 只有當成功給到他手上並監督他看完,老師才能得到響應,去做別的事。
如果此時有100個學生都要去看書,
此時,只有等前100個學生都看完,纔會監督第101個

異步消息:
老師將書放到消息隊列後,即會返回一個成功響應,此時,老師就可以立刻去做別的事情,不需要監督學生看完。

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