go-zero网关的简单实用

go-zero网关的简单实用 依赖上文中的服务端代码部署1. 初始化项目mkdirGatewaycdGatewaymkdirprotocdprototouchuser.protouser.protosyntaxproto3;packageuser;// protoc-gen-go 版本大于1.4.0, proto文件需要加上go_package,否则无法生成option go_package./user;message IdRequest{int32id1;}message UserResponse{// 用户idint32id1;// 用户名称stringname2;// 用户性别int32gender3;}message UserOauthResponse{int32id1;stringnickname2;stringavatar3;}message UserNameResponse{// 用户idint32id1;// 用户名称stringname2;}service User{rpcgetUser(IdRequest)returns(UserResponse);rpcgetUserOauth(IdRequest)returns(UserOauthResponse);rpcgetUserName(IdRequest)returns(UserNameResponse);}2. 生成ProtocolBuff的.pb文件cdprotomkdirpb根目录下执行protoc--descriptor_set_outproto/pb/user.pb proto/user.proto目录结构为└── proto ├── pb │ └── user.pb └── user.proto3. 创建配置文件mkdiretctouchgateway.yamlgateway.yamlName:qt-apiHost:0.0.0.0Port:8888Upstreams:-Grpc:Etcd:Hosts:-127.0.0.1:2379Key:user.rpc# protoset modeProtoSets:-proto/pb/user.pb# Mappings can also be written in proto optionsMappings:-Method:getPath:/pingRpcPath:user.User/getUser4. 启动程序初始化项目,新建main.go文件go mod init gatewaymain.gopackagemainimport(flagfmtgithub.com/zeromicro/go-zero/core/confgithub.com/zeromicro/go-zero/gateway)varconfigFileflag.String(f,etc/gateway.yaml,the config file)funcmain(){flag.Parse()varc gateway.GatewayConf conf.MustLoad(*configFile,c)server:gateway.MustNewServer(c)deferserver.Stop()fmt.Printf(Starting server at %s:%d...\n,c.Host,c.Port)server.Start()}go mod tidy go run main.go此时按照gateway.yaml中定义的路径将会转发到rpc服务中wanchengMacBook-Pro-4 ~ %curl127.0.0.1:8888/ping{id:0,name:来自rpc服务器0.0.0.0:8081返回的名字,gender:1}%源码