为了账号安全,请及时绑定邮箱和手机立即绑定

gRPC 连接问题:如何判断是服务端还是客户端?

gRPC 连接问题:如何判断是服务端还是客户端?

Go
达令说 2023-03-29 17:25:57
我正在阅读一本名为“Go Blueprints”的 Golang 书。所以其中一章是关于实现微服务的。与该服务的通信可以是 http 或 gRPC。我认为我做的一切都是对的,但是我无法进行 gRPC 通信。当我尝试从客户端询问服务器时,出现此错误:rpc error: code = Unimplemented desc = unknown service Vault我的问题是如何开始调试这个?如何检查问题出在服务器还是客户端?
查看完整描述

1 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

Hash在您的实现中,当您为和初始化端点时,服务名称是错误的Validate。它应该pb.Vault代替Vault. 所以这个New方法应该是这样的:


func New(conn *grpc.ClientConn) vault.Service {

    var hashEndpoint = grpctransport.NewClient(

        conn, "pb.Vault", "Hash",

        vault.EncodeGRPCHashRequest,

        vault.DecodeGRPCHashResponse,

        pb.HashResponse{},

    ).Endpoint()

    var validateEndpoint = grpctransport.NewClient(

        conn, "pb.Vault", "Validate",

        vault.EncodeGRPCValidateRequest,

        vault.DecodeGRPCValidateResponse,

        pb.ValidateResponse{},

    ).Endpoint()


    return vault.Endpoints{

        HashEndpoint:     hashEndpoint,

        ValidateEndpoint: validateEndpoint,

    }

}

一般来说,你应该参考.pb.go匹配生成的文件proto来了解事物的命名方式。如您所见,这并不简单,可能取决于proto生成器的实现。


在您的情况下,它看起来像这样:


grpc.ServiceDesc{

    ServiceName: "pb.Vault",

    HandlerType: (*VaultServer)(nil),

    Methods: []grpc.MethodDesc{

        {

            MethodName: "Hash",

            Handler:    _Vault_Hash_Handler,

        },

        {

            MethodName: "Validate",

            Handler:    _Vault_Validate_Handler,

        },

    },

    Streams:  []grpc.StreamDesc{},

    Metadata: "vault.proto",

}


查看完整回答
反对 回复 2023-03-29
  • 1 回答
  • 0 关注
  • 109 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信