一个GRPCServer实现多个proto文件
- 多个proto文件定义在同一个package包中
- 每个proto文件中的service不相同(多个接口)
- 注册GRPCServer的结构体需要实现多个proto文件中定义的接口的方法
- 注册GRPCServer时需要调用每个pb.go文件中的RegisterXXXXServer方法
举例
-
第一个proto文件
syntax = "proto3"; package api; service Decision { rpc Decision(DecisionReq) returns (DecisionRes){} } message DecisionReq { string Headers = 1; int64 MemberId = 2; } message Error { string Error = 1; int64 Code = 2; } message DecisionRes { int64 Code = 1; Error Result = 2; int64 ResultType = 3; string RequestId = 4; int64 Timestamp = 5; } -
第二个proto文件
syntax = "proto3"; package api; service Api { // Sends a greeting rpc HelloWorld(HelloReq) returns (HelloRes) {} } message HelloReq { string Name = 1; } message HelloRes { string Res = 1; } -
注册server
package handler import ( pb "api_server/handler/proto" "google.golang.org/grpc" "log" "net" ) var gServer = grpc.NewServer() type Api struct{} // 实现多个proto文件中定义的方法 func Start(addr string) { conn, err := net.Listen("tcp", addr) if err != nil { log.Fatalf("net listen err: %v", err) } pb.RegisterApiServer(gServer, &Api{}) // 多次注册 pb.RegisterDecisionServer(gServer, &Api{}) // 多次注册 gErr := gServer.Serve(conn) if gErr != nil { log.Fatalf("grpc server err:%v", err) } } func Stop() { gServer.GracefulStop() log.Println("grpc server stop") }
本文介绍了如何在一个GRPC Server中同时处理来自不同proto文件的服务接口,包括api决策和api服务,展示了如何创建一个结构体并实现多个接口以注册到服务器,以及如何通过pb.go文件中的注册方法进行注册过程。
1343

被折叠的 条评论
为什么被折叠?



