<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-35  評論-33  文章-0  trackbacks-0
            當(dāng)我們淡到RPC服務(wù)框架,放眼世界范圍,我目前知道的主流有thrift,fingle,grpc等。當(dāng)然大型互聯(lián)網(wǎng)公司都會(huì)有自己的RPC服務(wù)與治理框架。經(jīng)過一段時(shí)間的調(diào)研,本著簡單,高效的原則,最終選擇thrift.具體原因,等接下來寫到服務(wù)篇的時(shí)候再細(xì)說。

           對于曾經(jīng)使用過thrift來開發(fā)RPC服務(wù)的同學(xué)來講,經(jīng)常碰到就是client去連server端的時(shí)候,程序首先要聲明連接協(xié)議,我們以socket為例。然后開始連接到服務(wù)端,調(diào)用遠(yuǎn)端的方法,關(guān)閉連接。

    代碼片斷如下:

    伴隨著服務(wù)越來越多,如果我們的代碼中充斥這些duplicate code,心里總是癢癢的,非得把它干掉。聯(lián)想到當(dāng)初最開始寫 jdbc常用的crud方法那段時(shí)間,代碼里面也是挺多的open,close種種。其實(shí)想想,如果能有連接池,這個(gè)問題也就好解決了。于是,首先在github上找找,有沒有現(xiàn)成的實(shí)現(xiàn)。果然,有一位前輩已經(jīng)實(shí)現(xiàn)了。于是果斷下載,地址是https://github.com/PhantomThief/thrift-pool-client

    下面是這個(gè)客戶端所實(shí)現(xiàn)的功能,感覺還是相當(dāng)不錯(cuò)的。

    A Thrift Client pool for Java

    raw and type safe TServiceClient pool

    Multi backend servers support

    Backend servers replace on the fly

    Backend route by hash or random

    Failover and failback support

    jdk 1.8 only

    不過,看了md之后,發(fā)現(xiàn)only support jdk8。心里涼了半截,難道老外都在用jdk8了?于是花了半天時(shí) 間,熟讀了新的語法之后,準(zhǔn)備改造前輩的代碼。通讀代碼之后,發(fā)現(xiàn)里面有好幾個(gè)類使用lambda語法,flatmap,collection,filter.另外就是函數(shù)是編程function.最后還有Supplier。好在guava已經(jīng)實(shí)現(xiàn)了后兩者,我只需要改改lambda的語法。

    核心類說明:

    ThriftClientImpl:它是客戶端的實(shí)現(xiàn)類,主要是業(yè)務(wù)方經(jīng)常用到的iface方法,先看圖:



    里面有兩段代碼需要改動(dòng)。第一個(gè)就是設(shè)置執(zhí)行的方法過濾,第二個(gè)是代理方法里面調(diào)用,實(shí)際就是業(yè)務(wù)方真正調(diào)用的方法塊。關(guān)鍵點(diǎn)是javassist它是一種字節(jié)碼處理技術(shù),可以動(dòng)態(tài)改變方法塊。本段代碼其實(shí)類似一個(gè)代理工廠,它代理了所有業(yè)務(wù)服務(wù)的執(zhí)行片斷

    DefaultThriftConnectionPoolImpl,ThriftConnectionFactory:thrift連接池實(shí)現(xiàn),基本是apache pool的通用連接池處理。

    其中sokcet.open對應(yīng)著makeobject.socket.close對應(yīng)著destroyobject


    ThriftClientUtils:這個(gè)類有一個(gè)獲取接口中所有方法的名稱集合的方法,把lambda的語法改成熟悉的方式。


    其它類也是做了相關(guān)調(diào)整,這里就不一一說明了。最后講一下調(diào)用。

    1連接池初始化


    2 構(gòu)建單例的rpc服務(wù),因?yàn)閞pc服務(wù)可能在多臺機(jī)器上,所以會(huì)有分片


    3 協(xié)議的聲明


    4 調(diào)用


    5結(jié)果,因?yàn)槲矣幸粋€(gè)簡單的計(jì)算服務(wù),已經(jīng)發(fā)布在測試機(jī)器了,這里就是1+99的結(jié)果。


    主體寫完了,改天會(huì)把github的地址貼上來,請隨時(shí)關(guān)注。

    更新地址 ----》》》thrift-pool-client



    我的微信公眾號,歡迎溝通學(xué)習(xí)。
    posted on 2016-06-29 18:14 alexcai 閱讀(1529) 評論(2)  編輯  收藏

    評論:
    # re: 我的RPC服務(wù)構(gòu)建之路《客戶端篇--改造基于jdk8的thrift pool client》 2016-06-30 00:42 | 蜜桃網(wǎng)
    路過支持一下  回復(fù)  更多評論
      
    # re: 我的RPC服務(wù)構(gòu)建之路《客戶端篇--改造基于jdk8的thrift pool client》 2016-06-30 09:33 | alexcai
    @蜜桃網(wǎng)
    多謝  回復(fù)  更多評論
      

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲国产成人精品无码区花野真一 | 亚色九九九全国免费视频| 亚洲AV第一页国产精品| av永久免费网站在线观看| 亚洲精品乱码久久久久久中文字幕| 九九九国产精品成人免费视频| 亚洲国产精品不卡毛片a在线| 色老头综合免费视频| 中文字幕亚洲一区| 久草福利资源网站免费| 亚洲资源在线视频| 无码高潮少妇毛多水多水免费| 亚洲av无码专区在线电影天堂| 四虎影视在线永久免费看黄| 日韩免费在线中文字幕| 亚洲中文字幕久久精品无码喷水| 国内精品一级毛片免费看| 久久久久亚洲精品无码蜜桃| 国产成人免费网站| 美女被艹免费视频| 亚洲成色WWW久久网站| 国产妇乱子伦视频免费| 亚洲av永久无码精品网址| 久久国产成人亚洲精品影院| 日本免费一区二区三区四区五六区| 亚洲国产成人超福利久久精品 | 国产日韩成人亚洲丁香婷婷| 两个人看的www高清免费视频 | jizz免费观看| 久久精品国产亚洲AV无码偷窥| 免费国产黄线在线观看| 久青草国产免费观看| 亚洲视频在线播放| 四虎影视精品永久免费网站| 久久久99精品免费观看| 亚洲乱妇老熟女爽到高潮的片| 伊人亚洲综合青草青草久热| 日本亚洲免费无线码| 2022免费国产精品福利在线| 亚洲一区二区三区无码国产| 国产亚洲精品激情都市|