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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

消息中间件Client模块划分

發(fā)布時(shí)間:2023/12/19 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 消息中间件Client模块划分 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

上圖是之間討論確定的系統(tǒng)架構(gòu)(后續(xù)內(nèi)容會(huì)按照這個(gè)架構(gòu)來敘述),其中:

  • 客戶端包含Producer和Consumer兩大塊

  • 客戶端需要和NameServer交互來獲取元數(shù)據(jù)

  • 客戶端需要和Broker交互來讀寫消息

  • Client模塊劃分

    1. 網(wǎng)絡(luò)模塊

    第一個(gè)仍然是網(wǎng)絡(luò)模塊。Client需要獲取元數(shù)據(jù),需要讀寫消息,網(wǎng)絡(luò)模塊是必不可少的。 和Broker不同的是,Client的網(wǎng)絡(luò)模塊要簡(jiǎn)單一些。Broker需要向NameServer匯報(bào)數(shù)據(jù),同時(shí)還要處理來自Client的請(qǐng)求,而Client更多的只是發(fā)出請(qǐng)求:

    • 向NameServer獲取元數(shù)據(jù)

    • 向Broker寫入消息

    • 從Broker獲取消息

    2. 編解碼模塊

    Client需要將消息寫到Broker,同時(shí)也需要從Broker獲取消息,這兩個(gè)過程會(huì)涉及到消息的編解碼。

    3. 元數(shù)據(jù)相關(guān)

    Client相關(guān)的元數(shù)據(jù)有Topic、消費(fèi)進(jìn)度、Group(之前介紹過的概念,可以看之前的文章),另外還需要感知其他的客戶端的存在(叫Member信息或者Client Instance信息吧),所以需要Member數(shù)據(jù)。那么元數(shù)據(jù)相關(guān)大概是以下組件:

    • TopicManager

    • PositionManager

    • GroupManager

    • MemberManager

    4. 發(fā)送相關(guān)

    Producer API

    對(duì)于Client而言,很重要的一個(gè)模塊就是暴露出去的發(fā)送和消費(fèi)的API,這是使用方唯一能接觸到的地方(寫代碼時(shí),任何暴露出去的API已經(jīng)要謹(jǐn)慎謹(jǐn)慎再謹(jǐn)慎)。

    對(duì)于發(fā)送的API,從不同的角度可以分為:

    • 從發(fā)送方式上有同步發(fā)送和異步發(fā)送

    • 從發(fā)送消息量上有單條發(fā)送和批量發(fā)送

    路由模塊

    對(duì)于發(fā)送而言,一條消息最終需要落到某一個(gè)確定的分區(qū)上。所以客戶端會(huì)包含一個(gè)路由模塊來根據(jù)消息的屬性和Topic的元信息來選擇分區(qū)。

    5. 消費(fèi)相關(guān)

    Consumer API

    消費(fèi)相關(guān)的API會(huì)比發(fā)送的復(fù)雜一些,因?yàn)橄M(fèi)需要提供更多的模式。另外為了保證順序性、減少消息的重復(fù)等,消費(fèi)還需要引入租約等組件。租約和Consumer的各種模式已經(jīng)是比較細(xì)節(jié)的問題了,在設(shè)計(jì)階段在進(jìn)行介紹。

    分區(qū)分配模塊

    發(fā)送方需要選擇將消息寫入到哪個(gè)分區(qū),而消費(fèi)方需要決定自己消費(fèi)哪些分區(qū),所以對(duì)應(yīng)于發(fā)送方的路由模塊,消費(fèi)方會(huì)有分區(qū)分配的模塊。

    緩存模塊

    為了保證性能,Consumer從Broker獲取消息和使用方消費(fèi)消息是異步的,中間需要Buffer來緩存消息,所以Consumer相對(duì)于Producer會(huì)多一個(gè)緩存模塊。

    除了以上模塊,還會(huì)有LifeCycle這樣生命周期相關(guān)的基礎(chǔ)模塊,這個(gè)也是上一篇在介紹Broker模塊時(shí)遺漏的。

    總結(jié)以上內(nèi)容,Client包含的模塊大概如下:

    ?

    結(jié)語(yǔ)

    本篇主要是把Client的幾個(gè)模塊劃分出來,為之后的詳細(xì)設(shè)計(jì)做準(zhǔn)備。 下一篇會(huì)整理一下NameServer的模塊,然后大概會(huì)有一到兩篇的篇幅總結(jié)一些架構(gòu)、流程、數(shù)據(jù)流等。

    往期內(nèi)容:

    《什么是分布式消息中間件》

    《消息中間件的一些概念》

    《業(yè)務(wù)方對(duì)消息中間件的需求》

    《消息中間件架構(gòu)討論》

    《Broker模塊劃分》

    歡迎關(guān)注此公眾號(hào),將堅(jiān)持不懈的寫MQ相關(guān)的技術(shù)文章,希望能和更多的朋友交流。

    如果本文對(duì)您有幫助,點(diǎn)一下右下角的“推薦”

    總結(jié)

    以上是生活随笔為你收集整理的消息中间件Client模块划分的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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