wego - 采用 go-kit 模式封装的 golang 开发框架


MIT
跨平台
Google Go

软件简介

采用 go-kit 模式封装的 golang 开发框架

开发流程:

  1. 编写 service 中间件
  2. 组合中间件形成 service chain
  3. handler 由 filter(endpoint)和 service chain 组合形成
  4. provider 中注册 handler
  5. server 的路由中注册各种 handler

内置支持 Server

  • http
  • grpc
  • websocket
  • cronjob
  • timer
  • command
  • redis queue
  • 内部event server
  • gateway 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