消息隊列兩種消費模式pull與push
一、概念
MQ的消費模式分兩種:push和pull。
所謂push就是服務端主動推送消息給客戶端,而pull則是客戶端需要主動到服務端取數據。
二、兩種模式的優缺點
2.1 push模式的優缺點
push優點:
服務端主動推送給客戶端,及時性很高
push缺點:
1.當客戶端消費能力遠低於服務端生產能力,那么一旦服務端推送大量消息到客戶端時,就會導致客戶端消息堆積,處理緩慢,甚至服務崩潰。(那么如何解決這個問題呢?需要mq提供流控制,也就是依據客戶端消費能力做流控。比如rabbitmq設置Qos,限制消費數量。)
2.服務端需要維護每次傳輸狀態,以防消息傳遞失敗進行重試。
2.2 pull模式的優缺點
pull模式優點:
1.客戶端可以依據自己的消費能力進行消費
2.傳輸失敗時不需要重試,反正數據還在服務端。
pull模式缺點:
1.主動到服務端拉取消息。這個拉取消息的間隔需要設置好,不太好設置。間隔太短,對服務器請求壓力過大。間隔時間過長,那么必然會造成一部分數據的延遲。(也有一些解決方案,間隔時間指數級增長,5ms,10ms,20ms,40ms,80ms。。。然后再回到5ms,一定程度上解決,但是如果在41ms時來了數據,那么到80ms就有40ms左右的時間延遲。另外在騰訊的CMQ里有一套長輪詢的解決方案,就是取數據時要是沒有數據可消費,不是直接返回而是連接等待,一直有數據來了再返回)
三、push和pull模式不同適用場景
對於服務端生產消息數據比較大時,而消費端處理比較復雜,消費能力相對較低時,這種情況就適用pull模式。
對於數據實時性要求高的場景,就比較適用與push模式。
四、不同消息中間件支持的模式
不同消息中間支持模式
另外springboot集成的rabbitmq封裝的就是push模式。