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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

consumer详解

發(fā)布時(shí)間:2023/12/29 综合教程 36 生活家
生活随笔 收集整理的這篇文章主要介紹了 consumer详解 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

https://blog.csdn.net/weixin_42195284/article/details/93461429#7.1push和pull模式

push和pull模式

在RocketMQ中,消費(fèi)者有兩種模式,一種是push模式,另一種是pull模式。

push模式:客戶端與服務(wù)端建立連接后,當(dāng)服務(wù)端有消息時(shí),將消息推送到客戶端。
pull模式:客戶端不斷的輪詢請(qǐng)求服務(wù)端,來(lái)獲取新的消息。

但在具體實(shí)現(xiàn)時(shí),Push和Pull模式都是采用消費(fèi)端主動(dòng)拉取的方式,即consumer輪詢從broker拉取消息。

區(qū)別: Push方式里,consumer把輪詢過(guò)程封裝了,并注冊(cè)MessageListener監(jiān)聽器,取到消息后,喚醒 MessageListener的consumeMessage()來(lái)消費(fèi),對(duì)用戶而言,感覺消息是被推送過(guò)來(lái)的。 Pull方式里,取消息的過(guò)程需要用戶自己寫,首先通過(guò)打算消費(fèi)的Topic拿到MessageQueue的集合,遍歷 MessageQueue集合,然后針對(duì)每個(gè)MessageQueue批量取消息,一次取完后,記錄該隊(duì)列下一次要取的開 始o(jì)ffset,直到取完了,再換另一個(gè)MessageQueue。

疑問(wèn):既然是采用pull方式實(shí)現(xiàn),RocketMQ如何保證消息的實(shí)時(shí)性呢?

長(zhǎng)輪詢

長(zhǎng)輪詢即是在請(qǐng)求的過(guò)程中,若是服務(wù)器端數(shù)據(jù)并沒有更新,那么則將這個(gè)連接掛起,直到服務(wù)器推送新的 數(shù)據(jù),再返回,然后進(jìn)入循環(huán)周期。 客戶端像傳統(tǒng)輪詢一樣從服務(wù)端請(qǐng)求數(shù)據(jù),服務(wù)端會(huì)阻塞請(qǐng)求不會(huì)立刻返回,直到有數(shù)據(jù)或超時(shí)才返回給客 戶端,然后關(guān)閉連接,客戶端處理完響應(yīng)信息后再向服務(wù)器發(fā)送新的請(qǐng)求

消息模式

集群模式
同一個(gè) ConsumerGroup(GroupName相同) 里的每 個(gè) Consumer 只消費(fèi)所訂閱消息的一部分內(nèi)容, 同 一個(gè) ConsumerGroup 里所有的 Consumer消費(fèi)的內(nèi)容合起來(lái)才是所訂閱 Topic 內(nèi)容的整體, 從而達(dá)到 負(fù)載均衡的目的 。
廣播模式
同一個(gè) ConsumerGroup里的每個(gè) Consumer都 能消費(fèi)到所訂閱 Topic 的全部消息,也就是一個(gè)消息會(huì) 被多次分發(fā),被多個(gè) Consumer消費(fèi)。

重復(fù)消息的解決方案

造成消息重復(fù)的根本原因是:網(wǎng)絡(luò)不可達(dá)。只要通過(guò)網(wǎng)絡(luò)交換數(shù)據(jù),就無(wú)法避免這個(gè)問(wèn)題。所以解決這個(gè)問(wèn)題的辦 法就是繞過(guò)這個(gè)問(wèn)題。那么問(wèn)題就變成了:如果消費(fèi)端收到兩條一樣的消息,應(yīng)該怎樣處理?

消費(fèi)端處理消息的業(yè)務(wù)邏輯保持冪等性
保證每條消息都有唯一編號(hào)且保證消息處理成功與去重表的日志同時(shí)出現(xiàn)

第1條很好理解,只要保持冪等性,不管來(lái)多少條重復(fù)消息,最后處理的結(jié)果都一樣。
第2條原理就是利用一張日志 表來(lái)記錄已經(jīng)處理成功的消息的ID,如果新到的消息ID已經(jīng)在日志表中,那么就不再處理這條消息。 第1條解決方案,很明顯應(yīng)該在消費(fèi)端實(shí)現(xiàn),不屬于消息系統(tǒng)要實(shí)現(xiàn)的功能。第2條可以消息系統(tǒng)實(shí)現(xiàn),也可以業(yè)務(wù) 端實(shí)現(xiàn)。正常情況下出現(xiàn)重復(fù)消息的概率其實(shí)很小,如果由消息系統(tǒng)來(lái)實(shí)現(xiàn)的話,肯定會(huì)對(duì)消息系統(tǒng)的吞吐量和高 可用有影響,所以最好還是由業(yè)務(wù)端自己處理消息重復(fù)的問(wèn)題,這也是RocketMQ不解決消息重復(fù)的問(wèn)題的原因。

RocketMQ不保證消息不重復(fù),如果你的業(yè)務(wù)需要保證嚴(yán)格的不重復(fù)消息,需要你自己在業(yè)務(wù)端去重

總結(jié)

以上是生活随笔為你收集整理的consumer详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。