日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Message Queue中的推与拉(转)

發布時間:2024/8/26 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Message Queue中的推与拉(转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Message Queue的設計和實現(7)
http://mp.weixin.qq.com/s/zQdDBAHu1UgJJzxH2eCHgQ

?

數據發送中的推與拉。

?

?

當MQ要把數據給消費者的時候,就涉及到數據的傳遞方式。一種是MQ主動的將數據推給消費者;而另一種,則是消費者主動去拉取。兩種方式各有優缺,我們就一個個的來講。(無非就是在愛情中誰主動的問題^_^)

?

推模式

?

推模式很明顯,主動方應該是MQ。在實現的時候卻有兩種方式。

?

1、MQ知道消費者的IP和端口,主動發起連接,推送數據。

?

這種方式是最容易想到和實現的。socket在connect的時候,需要IP:Port。只要這兩個數據存在了,MQ就很輕松的將數據推送出去。但是,問題來了,怎么知道IP和Port。

?

這里有兩種方式:

?

A、MQ存儲有所有消費者的列表。就是手動或者半自動的將所有消費者的列表配置到MQ中。這種方式實現簡單,但是靈活性太差,擴展性不好;

?

B、消費者自動注冊到MQ。當消費者啟動以后,調用MQ提供的regist方法,自動將自己的IP和Port提交到MQ。注冊成功后,MQ將信息放入發送meta數據中,進行推送。

?

第二種方式擴展性比第一種好很多,但是復雜性也相對比第一種要大一些。

?

2、消費者主動連接到MQ,再由MQ進行信息推送。

?

這種方式的實現必須采用長連接的方式。即:消費者主動connect到MQ,然后兩者維持連接不斷開。當有數據到來時,MQ利用這個已有的長連接,將對應的數據推送到消費者。

?

這種方式實現的難度比較高,涉及到長連接維持,以及連接的存活管理。而且如果后端有大量的消費者的話,MQ會消耗比較多的連接資源。

?

以上聊的是推的模式。這種模式及時性非常好,數據一到達,立馬可以push到消費者,基本沒有延遲。但是實現復雜度和靈活性會稍微麻煩一些。

?

拉模式

?

這種模式就比較簡單,就是消費者主動。每次由消費者主動去獲取信息。不論長短連接都可以。MQ也不用維持連接狀態和消費者信息,只要你來獲取,我就把數據給你。

?

這種方式的好處在于實現非常簡單,MQ無負擔,不用記錄消費者的信息。如果服務掛掉或者重啟,也不用擔心消費者信息狀態丟失。因為他自己會來主動獲取。

?

不足之處在于有可能存在短暫延遲。

?

在實現的時候,也可以有改進。比如,消費者去MQ拉取數據,如果拉取后沒有數據,可以停留一定時間(比如:100毫秒)再去拉取。如果拉取有數據,則不用停留,直接拉取。拉的時候也可以走批量拉取,避免數據堆積。

?

總的來講,推拉模式都是可行的,實現復雜度其實也都還好,大家可以根據自身業務的特點來定制這兩種模式。

轉載于:https://www.cnblogs.com/bluestorm/p/6675447.html

總結

以上是生活随笔為你收集整理的Message Queue中的推与拉(转)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。