我有以下proto文件:
service_myservice.proto
service MyService {
rpc GetData(GetRequest) returns (GetResponse) {}
}
字符串
server.go
type Server struct {
pb.UnimplementedMyServiceServer
config util.Config
}
// NewServer creates a new gRPC server.
func NewServer(config util.Config) (*Server, error) {
server := &Server{
config: config,
}
return server, nil
}
型
然后在main包中调用这个函数
func runGrpcServer(config util.Config) {
server, err := gapi.NewServer(config)
if err != nil {
log.Fatal().Err(err).Msg("cannot create server")
}
grpcLogger := grpc.UnaryInterceptor(gapi.GrpcLogger)
grpcServer := grpc.NewServer(grpcLogger)
pb.RegisterMyServiceServer(grpcServer, server)
reflection.Register(grpcServer)
listener, err := net.Listen("tcp", config.GRPCServerAddress)
if err != nil {
log.Fatal().Err(err).Msg("cannot create listener")
}
log.Info().Msgf("start gRPC server at %s", listener.Addr().String())
err = grpcServer.Serve(listener)
if err != nil {
log.Fatal().Err(err).Msg("cannot start gRPC server")
}
}
型
我正在使用evans(https://github.com/ktr0731/evans)测试我的grpc调用。我的gRPC服务器正在运行,我可以使用evans连接到特定端口(9090)上的localhost。
然而,当我在evans中调用show service
时,我得到了以下响应:
localhost:9090> show service
+---------+-----+--------------+---------------+
| SERVICE | RPC | REQUEST TYPE | RESPONSE TYPE |
+---------+-----+--------------+---------------+
+---------+-----+--------------+---------------+
localhost:9090> call GetData
command call: failed to get the RPC descriptor for: GetData: service unselected
型
我想如果我在Server
结构中添加pb.UnimplementedMyServiceServer
,这是向前兼容的。但显然,我缺少了一些代码。MyService
要向前兼容,缺少什么部分?
1条答案
按热度按时间xfb7svmp1#
在REPL模式下使用evans时,调用
show service
前需要选择一个包,调用call GetData
前需要选择一个服务。字符串