跳到主要内容

gRPC

gRPC 如何通过契约生成远程调用代码?​

  • gRPC: 远程过程调用框架,以服务方法、请求和响应消息描述接口,常用 Protocol Buffers 作为接口定义与序列化格式;
  • Protocol Buffers: 用字段编号定义结构化消息,可生成多语言代码,二进制表达通常紧凑但不便直接阅读;
  • 收益: 强类型契约、代码生成与双向流适合服务间高吞吐或多语言通信;
  • 代价: 浏览器接入常需专门适配,字段演进要遵循兼容规则,抓包调试依赖工具;
service Greeting {
rpc SayHello (HelloRequest) returns (HelloReply);
}
message HelloRequest { string name = 1; }
message HelloReply { string text = 1; }

生成的客户端怎样调用远程服务?​

服务与消息定义 → 生成客户端及服务端接口
调用方传入请求对象 → 序列化并传输
服务端执行方法 → 返回响应对象或错误
  • 远程边界: 调用写法像本地函数,但仍会超时、断线或返回不确定结果,需要设置截止时间并设计重试语义;
  • 字段演进: 字段编号是协议的一部分,不能随意把已使用编号改给新含义;
  • 流式通信: 可以传输连续请求或响应,双向流适合持续交互,但仍要控制处理速度和积压;
  • 可发现性: 接口定义和生成工具帮助调用方理解服务,不能把缺少普通浏览器页面当作没有契约;