RocketMQ的Consumer详解之push和pull模式(长轮询)
?push和pull模式
在RocketMQ中,消費者有兩種模式,一種是push模式,另一種是pull模式。
push模式:客戶端與服務端建立連接后,當服務端有消息時,將消息推送到客戶端。
pull模式:客戶端不斷的輪詢請求服務端,來獲取新的消息。
但在具體實現時,Push和Pull模式都是采用消費端主動拉取的方式,即consumer輪詢從broker拉取消息。
區別:
Push方式里,consumer把輪詢過程封裝了,并注冊MessageListener監聽器,取到消息后,喚醒MessageListener的consumeMessage()來消費,對用戶而言,感覺消息是被推送過來的。
Pull方式里,取消息的過程需要用戶自己寫,首先通過打算消費的Topic拿到MessageQueue的集合,遍歷MessageQueue集合,然后針對每個MessageQueue批量取消息,一次取完后,記錄該隊列下一次要取的開始offset,直到取完了,再換另一個MessageQueue。
疑問:既然是采用pull方式實現,RocketMQ如何保證消息的實時性呢?
長輪詢
RocketMQ中采用了長輪詢的方式實現,什么是長輪詢呢?
長輪詢即是在請求的過程中,若是服務器端數據并沒有更新,那么則將這個連接掛起,直到服務器推送新的數據,再返回,然后進入循環周期。
客戶端像傳統輪詢一樣從服務端請求數據,服務端會阻塞請求不會立刻返回,直到有數據或超時才返回給客戶端,然后關閉連接,客戶端處理完響應信息后再向服務器發送新的請求。
?
總結
以上是生活随笔為你收集整理的RocketMQ的Consumer详解之push和pull模式(长轮询)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RocketMQ的Producer详解之
- 下一篇: RocketMQ的Consumer详解之