wego- 采用 go-kit 模式封装的 golang 开发框架
wego- 采用 go-kit 模式封装的 golang 开发框架
采用 go-kit 模式封装的 golang 开发框架
开发流程:
编写 service 中间件组合中间件形成 service chainhandler 由 filter(endpoint)和 service chain 组合形成 provider 中注册 handlerserver 的路由中注册各种 handler
内置支持 Server
httpgrpcwebsocketcronjobtimercommandredis queue内部event servergateway server
main.go
//如果参数配置了registy,则自动进行consul的服务注册 grpc http 都可 //例如go run main.go -name=test_service -registy=127.0.0.1:8500 -server=grpc wego.Provider(&providers.ConsulRegistyProvider{}) //这里注册自己的handler wego.Provider(&provider.ExamProvider{}) //下面的server,根据启动args参数决定 wego.Router("grpc",&router.GrpcRouter{}) wego.Router("http",&router.HttpRouter{}) wego.Router("queue",&router.QueueRouter{}) wego.Router("command",&router.CommandRouter{}) wego.Router("websocket",&router.WebSocketRouter{}) wego.Router("timer",&router.TimerRouter{}) wego.Router("cron",&router.CronRouter{}) //内置加载事件服务,无需路由,直接调用 handler wego.Router("event", servers.NewEventCommServer()) wego.Start()
举例
//经过jwt认证后的用户id,和name fmt.Println(ctx.Request("claim.Id")) fmt.Println(ctx.GetValue("request.claim.Name")) //cache使用 v, _ := cache.Get("aaaaa") v := make(map[string]interface{}) v["aaa"] = "bbb" v["ccc"] = "ddd" _ = cache.Set("aaaaa", v, 60) //日志使用 ctx.Log.Info("one....") ctx.Log.Infof(format,arg...) //请求参数 ctx.Request("claim.Id") //返回值 ctx.Response("aa.bb", "cc") ctx.Response("aa.cc", "dd") //redis使用 client := clients.Redis() //从pool中获取一个链接 defer client.Close() //延时释放链接,本方法执行完毕时释放 _, _ = client.Do("SET", "go_key", "value") //mysql使用 user := model.CommUser{Id: id} has, _ := clients.DB().Get(&user) //event使用 params := make(map[string]interface{}) payload := &contracts.Payload{ Route: "two", ->接收处理的handler Params: params, } events.Fire(payload) //redis queue使用 默认db->1 msg := make(map[string]interface{}) msg["aaa"] = "bbb" err := queues.Fire( "demo1", ->发送的redis 队列 "queue_test", ->侦听队列的server需要处理的路由handler msg, ) //远程服务调用,// 为现有php模式而封装 params:=make(map[string]interface{}) params["test_rpc_post"] = "test_rpc_post" resp := clients. Micro("consul_demo"). //服务的名称 Service("demo.post"). //服务的注册的handler Params(params). Run() 该方法会从consul中获取注册的服务,并随机选择一个进行请求,支持grpc和http post http post 对应的远端路由为 http:/host+port/demo/post
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~