如何定义无请求参数的GRPC服务方法?
如何定义无请求参数的gRPC方法?
先看常规带请求参数的gRPC服务定义:
// 问候服务定义 service Greeter { // 发送问候 rpc SayHello (HelloRequest) returns (HelloReply) {} } // 包含用户名的请求消息 message HelloRequest { string name = 1; } // 包含问候内容的响应消息 message HelloReply { string message = 1; }
你写的rpc SayHello () returns (HelloReply) {}不符合gRPC语法——gRPC要求RPC方法的请求和响应必须指定消息类型,不能空着括号。这里有两种正确的实现方式:
方法一:使用官方内置的Empty类型
gRPC官方提供了google.protobuf.Empty预定义消息类型,专门用于处理无参数的请求或响应,使用前需要导入对应的proto文件:
import "google/protobuf/empty.proto"; // 问候服务定义 service Greeter { // 发送无参数问候 rpc SayHello (google.protobuf.Empty) returns (HelloReply) {} } // 包含问候内容的响应消息 message HelloReply { string message = 1; }
方法二:自定义空请求消息
如果不想依赖官方的Empty类型,也可以自己定义一个没有任何字段的空消息:
// 问候服务定义 service Greeter { // 发送无参数问候 rpc SayHello (EmptyRequest) returns (HelloReply) {} } // 空请求消息 message EmptyRequest {} // 包含问候内容的响应消息 message HelloReply { string message = 1; }
两种方式都能实现无请求参数的RPC方法,其中使用google.protobuf.Empty是更通用的选择,属于官方标准类型,跨语言调用时兼容性更好。
内容的提问来源于stack exchange,提问作者Jack Ma
相关产品推荐
相关产品推荐

