mq系列文章 對mq瞭解不是很多的,可以看一下下麵兩篇文章: 1. "聊聊mq的使用場景" 2. "聊聊業務系統中投遞消息到mq的幾種方式" 3. 聊聊消息消費的幾種方式 4. 如何確保消息至少消費一次 5. 如何保證消息消費的冪等性 本章內容 從消費者的角度出發,分析一下消息消費的兩種方式: 1. ...
mq系列文章
對mq瞭解不是很多的,可以看一下下麵兩篇文章:
- 聊聊mq的使用場景
- 聊聊業務系統中投遞消息到mq的幾種方式
- 聊聊消息消費的幾種方式
- 如何確保消息至少消費一次
- 如何保證消息消費的冪等性
本章內容
從消費者的角度出發,分析一下消息消費的兩種方式:
- push方式
- pull方式
push方式
消息消費的過程:
mq接收到消息
mq主動將消息推送給消費者(消費者需提供一個消費介面)
mq屬於主動方,消費者屬於一種被動消費,一旦有消息到達mq,會觸發mq推送機制,將消息推送給消費者,不管消費者處於何種狀態。
優點:
消費者代碼較少:對於消費者來說,只需提供一個消費介面給mq即可;mq將接收到的消息,隨即推送到指定的消費介面
消息實時性比較高:對於消費者來說,消息一旦到達mq,mq會立即推送給消費者
缺點:
1.消費者屬於被動方,消息量比較大時,對消費者性能要求比較高;若消費者機器資源有限,可能會導致壓力過載,引發宕機的情況。
2.對消費者可用性要求比較高:當消費者不可用時,會導致很push失敗,在mq方需要考慮至少推送成功一次,這塊的設計下章節會做說明。
pull方式
消息消費的過程:
1.消費端採用輪詢的方式,從mq服務中拉取消息進行消費
2.消費完成通知mq刪除已消費成功的消息
3.繼續拉取消息消費
對於消費者來說,是主動方,可以採用線程池的方式,根據機器的性能來增加或縮小線程池的大小,控制拉取消息的速度,可以很好的控制自身的壓力。
優點:
1.消費者可以根據自己的性能主動控制消息拉去的速度,控制自己的壓力,不至於把自己弄跨
2.實時性相對於push方式會低一些
3.消費者屬於主動方,控制權更大一些
缺點:
1.消費方需要實現消息拉取的代碼
2.消費速度較慢時,可能導致mq中消息積壓,消息消費延遲等
總結
消費者性能較好,對實時性要求比較高的,可以採用push的方式
消費者性能有限,建議採用pull的方式
整體上來說,主要在於消費者的性能,機器的性能如果沒有問題,push和pull都是可以的
大家有什麼看法,可以留言一起討論,希望本文對你有所幫助