<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Go每日一庫之強(qiáng)大的rk-boot

          共 3119字,需瀏覽 7分鐘

           ·

          2021-12-28 17:05

          最近發(fā)現(xiàn)了一個(gè)很強(qiáng)大的包,之所以覺得強(qiáng)大是因?yàn)?rk-boot通過配置文件一鍵啟動很多服務(wù),開始納悶就一個(gè)Go文件居然可以啟動gRPC、gin、echo、GoFrame等服務(wù),一看boot.go是引用了rookie-ninja組織下面的gRPC、gin、echo、GoFrame和prometheus客戶端定制boot包。下面土撥鼠就簡單介紹下一個(gè)這個(gè)庫的使用,這里拿gin的demo來演示。

          rk-boot的介紹

          通過 rk-boot,用戶可以通過yaml格式的配置文件啟動gRPC、gin、echo、GoFrame、prometheus客戶端或自定義入口服務(wù)。很容易易編譯、運(yùn)行和調(diào)試你的 grpc 服務(wù)、grpc 網(wǎng)關(guān)、swagger UI 和 rk-tv Web UI。

          為什么我們需要它?

          在我們公司項(xiàng)目中,各個(gè)部門的項(xiàng)目結(jié)構(gòu)都不統(tǒng)一,甚至一個(gè)小組內(nèi)都不會很統(tǒng)一,這種情況數(shù)不勝數(shù)(盡管用了框架規(guī)范)。

          • 公司中我們一般使用統(tǒng)一的項(xiàng)目布局來構(gòu)建服務(wù)。
          • 也使用統(tǒng)一的logging, metrics, tracing, authorization來構(gòu)建API。
          • 還可以讓應(yīng)用程序更快地替換掉核心依賴。
          • 可以節(jié)省我們編寫一些流行框架和庫的初始化程序的學(xué)習(xí)時(shí)間。
          • 我們還可以定義入口用于定制的服務(wù)。

          下圖是使用rk-boot的圖示

          arch

          Gin的示例

          這里土撥鼠只舉了關(guān)于gin的例子,跟其他組件例子(gRPC、echo、GoFrame、prometheus)相比,只是boot.yaml配置不同。這里gin會引用rk-gin的boot[1]包。

          目錄結(jié)構(gòu)

          ├──?boot.yaml
          └──?main.go

          boot.yaml

          ---
          gin:
          ??-?name:?greeter???????#?Required,?Name?of?gin?entry?服務(wù)名稱
          ????port:?8080??????????#?Required,?Port?of?gin?entry?端口號
          ????enabled:?true???????#?Required,?Enable?gin?entry?是否啟用gin
          ????sw:
          ??????enabled:?true?????#?Optional,?Enable?swagger?UI?是否啟用swagger
          ????commonService:
          ??????enabled:?true?????#?Optional,?Enable?common?service?是否啟用commonService
          ????tv:
          ??????enabled:??true????#?Optional,?Enable?RK?TV?是否啟用RK?TV

          main.go

          package?main

          import?(
          ???"context"
          ???"github.com/rookie-ninja/rk-boot"
          )

          func?main()?{
          ???//?創(chuàng)建rkboot實(shí)例?--?Create?a?new?boot?instance.
          ???boot?:=?rkboot.NewBoot()

          ???//?啟動rkboot?--?Bootstrap
          ???boot.Bootstrap(context.Background())

          ???//?等待接受關(guān)閉信號?--?Wait?for?shutdown?sig
          ???boot.WaitForShutdownSig(context.Background())
          }

          運(yùn)行&&請求

          $?go?run?main.go
          $?curl?-X?GET?localhost:8080/rk/v1/healthy
          {"healthy":true}

          Swagger

          可以通過 http://localhost:8080/sw 訪問swagger頁面

          TV

          可以通過 http://localhost:8080/rk/v1/tv 訪問TV頁面


          開啟中間件

          其中rk-boot依賴的 rk-grpc[2]、rk-gin[3] 集成了很多中間件,可以在boot.yaml中配置使用,下面是在gin的示例中開啟了日志zap的使用,可以通過訪問curl -X GET localhost:8080/rk/v1/healthy查看日志。

          gin:
          ??-?name:?greeter?????????????????????????????#?Required
          ????port:?8080????????????????????????????????#?Required
          ????enabled:?true?????????????????????????????#?Required
          ????commonService:????????????????????????????#?Optional
          ??????enabled:?true???????????????????????????#?Optional,?default:?false
          ????interceptors:?????????????????????????????#?Optional
          ??????loggingZap:
          ????????enabled:?true??

          另外還支持以下中間件,中間件源碼包interceptor[4]可以按需開啟使用。對應(yīng)的示例可以查看 example[5]。

          • logging middleware
          • prometheus metrics middleware
          • auth middleware
          • tracing middleware
          • panic middleware
          • metadata middleware
          • rate limit middleware
          • timeout middleware
          • gzip middleware
          • cors interceptor
          • jwt interceptor
          • secure interceptor
          • csrf interceptor

          小結(jié)

          rk-boot還支持gRPC代理目前還在試驗(yàn)階段,相信后續(xù)會有更多功能支持。土撥鼠今天介紹這個(gè)庫主要是覺得這種可配置化、定制的思想很值得在企業(yè)項(xiàng)目中借鑒和落地。還可以統(tǒng)一一些公共組件的使用,節(jié)省大量成本。如果你有相關(guān)看法,歡迎大家在留言區(qū)討論交流。

          參考資料

          [1]

          boot: https://github.com/rookie-ninja/rk-gin/tree/master/boot

          [2]

          rk-grpc: https://github.com/rookie-ninja/rk-grpc

          [3]

          rk-gin: https://github.com/rookie-ninja/rk-gin

          [4]

          interceptor: https://github.com/rookie-ninja/rk-gin/tree/master/interceptor

          [5]

          example: https://github.com/rookie-ninja/rk-gin/tree/master/example



          推薦閱讀


          福利

          我為大家整理了一份從入門到進(jìn)階的Go學(xué)習(xí)資料禮包,包含學(xué)習(xí)建議:入門看什么,進(jìn)階看什么。關(guān)注公眾號 「polarisxu」,回復(fù)?ebook?獲?。贿€可以回復(fù)「進(jìn)群」,和數(shù)萬 Gopher 交流學(xué)習(xí)。

          瀏覽 63
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  椎名空一区二区三区无码观看 | 黄色视频操逼 | 18禁片在线网站 | 中国一级大黄片 | 大尺度一区二区 |