消息队列的pull与push模式理解
錯誤理解
之所以將這個標題,定義為錯誤理解,原因就是無法真正的說服自己;
消息隊列的模式有兩種pull與push.先說說我之前的理解:
- pull模式指,客戶端連接上broker之后,主動發起方法調用獲取遠程的結果,說的直白一點就是一次RPC調用,即同步方法調用;
push模式:
客戶端與broker建立連接,當有消息進入broker,broker進行消息推送至所有的連接客戶端,即異步方法調用;但是真正的實現中broker一般是很難維護這么多長連接,那么它又是如何實現push的呢?
activemq的pull與push模式實現方式
今天有時間,于是打開了activemq 的5.14.x的代碼,一探究竟。對于activemq的代碼我不作描述,本文主是為了糾正思想。對于消息隊列pull與push模式的實現方式如下:
pull模式
客戶端(指一個connection,一般情況指一個tcp的連接建立)連接到broker之后,啟動一個線程,這個線程的任務就是循環調用方法從broker中拉取相應的消息至本地。如果是同步方法調用獲取則將相應的消息存放在本地內存中,當同步方法消費消息時,則從該內存區中直接獲取相應的消息進行消費;
push模式
客戶端連接到broker之后,啟動一個線程,這個線程的任務就是循環調用方法從broker中拉取相應的消息至本地。如果是異步方法調用,則直接調用監聽器方法,間接調用業務消費消息的方法,而不使用本地內存進行消息的緩存;所以這里的異步只是客戶端的異步,而非broker的主動推送。通過這種方式既能解決多客戶端的連接,也能解決類似服務端的push型的消息推送。在互聯網中這種實現才具有普便性,因為這種方式即解決了性能問題又解決了異步消息的需求。
通過對于pull與push的模式對比,可以非常清晰的理解如下問題:
- 為什么在互聯網上大吞吐量的消息隊列都是采用pull模式,而非broker push模式?
- 為什么采用broker push模式,由于消費端的性能會影響整個消息隊列服務器的性能?
- 為什么采用broker push模式,容易造成broker的消息積壓?
總結
對于網絡的理解沒有深刻認識,就會造成一種想當然的認識,然后自己就會進行一個誤區,以至于問題無法解決。那么換一個思路則山重水復疑無路,柳暗花明又一村。
思路決定出路…
總結
以上是生活随笔為你收集整理的消息队列的pull与push模式理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VB控件数组之操作技巧
- 下一篇: cisco ssl vpn设备和outl