1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Go每日一庫之強大的rk-boot

        共 3119字,需瀏覽 7分鐘

         ·

        2021-12-28 17:05

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

        rk-boot的介紹

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

        為什么我們需要它?

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

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

        下圖是使用rk-boot的圖示

        arch

        Gin的示例

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

        目錄結構

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

        boot.yaml

        ---
        gin:
        ??-?name:?greeter???????#?Required,?Name?of?gin?entry?服務名稱
        ????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實例?--?Create?a?new?boot?instance.
        ???boot?:=?rkboot.NewBoot()

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

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

        運行&&請求

        $?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]可以按需開啟使用。對應的示例可以查看 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

        小結

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



        推薦閱讀


        福利

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

        瀏覽 63
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            91国产在线精品 | 成人无码区免费视频网站入口 | 婷婷一区二区三区网站 | 青娱乐新网址 | 亚洲AV色影视 | 影音先锋亚洲天堂 | 啊啊啊啊不要啊视频 | www.黄色视频 | 男女操逼在线观看 | 日本电影三区 |