GMS 微服务 GMS

akkagao • 12572 次点击    
这是一个分享于 的项目,其中的信息可能已经有所发展或是发生改变。
# GMS 今天是2020年10月24日,一年一度的程序员节,把这个还在开发中的项目开源出来,感兴趣的朋友可以一起参与开发。如果有大神路过请多指教。 GMS是一款基于[gnet](https://github.com/panjf2000/gnet)网络框架开发的Golang RPC微服务框架。 ## 特点: **1:非常简单、学习成本极低。GMS处于初期阶段您想参与开发也非常简单。** ​ 只要您之前使用过类似Gin、beego这样的web框架。就能快速上手,使用方法和这些web框架一样简单。 **2: 不用定义proto等协议文件。** ​ 写proto文件不仅麻烦还容易出错。而且使用协议文件定义服务,最终在框架内部实现都要使用反射去调用目标方法。用反射调用方法比直接调用肯定性能要差。所以如果其他条件不变的情况,用GMS这种实现方式性能肯定是最好的。 ## 缺点: **1:目前很多功能还没有完善,不建议应用再公司项目中。** ## 快速开始 下载源码 进入 example 直接运行。或者按照以下步骤自己搭建Demo运行 下面我们以一个加法计算服务为类 ### 1:定义请求和返回对象 ```go package model type AdditionReq struct { NumberA int NumberB int } type AdditionRes struct { Result int } ``` ### 2:开发服务端 ```go package main import ( "github.com/akkagao/gms" "github.com/akkagao/gms/gmsContext" "example/model" ) func main() { // 初始化GMS服务 gms := gms.NewGms() // 添加业务处理路由(addition是业务处理方法的唯一标识,客户端调用需要使用) gms.AddRouter("addition", Addition) // 启动,以1024 为启动端口 gms.Run(1024) } /* 加法计算 */ func Addition(c *gmsContext.Context) error { additionReq := &model.AdditionReq{} // 绑定请求参数 c.Param(additionReq) // 结果对象 additionRes := &model.AdditionRes{} additionRes.Result = additionReq.NumberA + additionReq.NumberB // 返回结果 c.Result(additionRes) return nil } ``` ### 3:开发客户端 ```go package main import ( "fmt" "github.com/akkagao/gms/client" "github.com/akkagao/gms/codec" "github.com/akkagao/gms/discovery" "example/model" ) /* 模拟客户端 */ func main() { // 初始化一个点对点服务发现对象 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)) } ``` ## 待开发功能 - [x] v0.1.1 服务端支持 客户端指定序列化方式 - [ ] v0.1.2 注册中心 - [ ] 流控 - [ ] 熔断 - [ ] 监控统计
授权协议:
开发语言:
go 查看源码»
12572 次点击  
加入收藏 微博
1 回复  |  直到
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传