GMS基于?gnet 的微服務框架
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)計
評論
圖片
表情
