<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>

          GMS基于?gnet 的微服務框架

          聯(lián)合創(chuàng)作 · 2023-09-28 04:59

          GMS

          今天是2020年10月24日,一年一度的程序員節(jié),把這個還在開發(fā)中的項目開源出來,感興趣的朋友可以一起參與開發(fā)。如果有大神路過請多指教。

          GMS 是一款基于 gnet 網(wǎng)絡框架開發(fā)的 Golang RPC 微服務框架。

          特點:

          1:非常簡單、學習成本極低。GMS處于初期階段您想?yún)⑴c開發(fā)也非常簡單。

          只要您之前使用過類似Gin、beego這樣的web框架。就能快速上手,使用方法和這些web框架一樣簡單。

          2: 不用定義proto等協(xié)議文件。

          寫proto文件不僅麻煩還容易出錯。而且使用協(xié)議文件定義服務,最終在框架內部實現(xiàn)都要使用反射去調用目標方法。用反射調用方法比直接調用肯定性能要好。所以如果其他條件不變的情況,用GMS這種實現(xiàn)方式性能肯定是最好的。

          缺點:

          1:目前很多功能還沒有完善,不建議應用在公司項目中。

          快速開始

          下載源碼 進入 example 直接運行。或者按照以下步驟自己搭建Demo運行

          下面我們以一個加法計算服務為類

          1:定義請求和返回對象

          package model
          ?
          type AdditionReq struct {
            NumberA int
            NumberB int
          }
          ?
          type AdditionRes struct {
            Result int
          }

          2:開發(fā)服務端

          package main
          ?
          import (
            "github.com/akkagao/gms"
          ?
            "github.com/akkagao/gms/gmsContext"
          ?
            "example/model"
          )
          ?
          func main() {
            // 初始化GMS服務
            gms := gms.NewGms()
          ?
            // 添加業(yè)務處理路由(addition是業(yè)務處理方法的唯一標識,客戶端調用需要使用)
            gms.AddRouter("addition", Addition)
          ?
            // 啟動,以1024 為啟動端口
            gms.Run(1024)
          }
          ?
          /*
          加法計算
          */
          func Addition(c *gmsContext.Context) error {
            additionReq := &model.AdditionReq{}
            // 綁定請求參數(shù)
            c.Param(additionReq)
          ?
            // 結果對象
            additionRes := &model.AdditionRes{}
            additionRes.Result = additionReq.NumberA + additionReq.NumberB
          ?
            // 返回結果
            c.Result(additionRes)
            return nil
          }
          ?

          3:開發(fā)客戶端

          package main
          ?
          import (
            "fmt"
          ?
            "github.com/akkagao/gms/client"
            "github.com/akkagao/gms/codec"
            "github.com/akkagao/gms/discovery"
          ?
            "example/model"
          )
          ?
          /*
            模擬客戶端
          */
          func main() {
            // 初始化一個點對點服務發(fā)現(xiàn)對象
            discovery := discovery.NewP2PDiscovery("127.0.0.1:1024")
          ?
            // 初始化一個客戶端對象
            additionClient, err := client.NewClient(discovery)
            if err != nil {
              fmt.Println(err)
              return
            }
          ?
            // 設置 Msgpack 序列化器,默認也是 Msgpack
            additionClient.SetCodecType(codec.Msgpack)
          ?
            // 請求對象
            req := &model.AdditionReq{NumberA: 10, NumberB: 20}
            // 接收返回值的對象
            res := &model.AdditionRes{}
          ?
            // 調用服務
            err = additionClient.Call("addition", req, res)
            if err != nil {
              fmt.Println(err)
            }
            fmt.Println(fmt.Sprintf("%d+%d=%d", req.NumberA, req.NumberB, res.Result))
          }
          ?

          待開發(fā)功能

          • v0.1.1 服務端支持 客戶端指定序列化方式
          • v0.1.2 注冊中心
          • 流控
          • 熔斷
          • 監(jiān)控統(tǒng)計
          瀏覽 33
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          編輯 分享
          舉報
          <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>
                  久草手机在线 | 杨思敏一级婬片A片 | 操屄综合网 | 欧美日本一级二级三级 | 亚洲色综合视频 |