gRPC连接问题:如何判断它是服务器还是客户端?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gRPC连接问题:如何判断它是服务器还是客户端?相关的知识,希望对你有一定的参考价值。
我正在读一本名为“Go Blueprints”的Golang书。因此,其中一章是关于实施微服务。与该服务的通信可以是http或gRPC。我认为我做的一切都是正确的,但我无法获得gRPC通信工作。当我尝试从客户端询问服务器时,我收到此错误:
rpc error: code = Unimplemented desc = unknown service Vault
我的问题是如何开始调试这个?如何检查问题是在服务器中还是在客户端中?
答案
在您的实现中,初始化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",
}
以上是关于gRPC连接问题:如何判断它是服务器还是客户端?的主要内容,如果未能解决你的问题,请参考以下文章