前情提要
之前咱们聊过SpringBoot下开启多端口有3个思路,并分析了第一种开启独立management端口的实现细节,今天咱们聊聊开启gRPC端口的实现。
一、gRPC的特别之处
基于SpringBoot的微服务,其通信大多基于HTTP+JSON。前者为通信协议,后者为数据内容格式。更进一步说,这HTTP大多也是HTTP/1.1,随着HTTP协议的发展HTTP/2, HTTP/3也已经出来了。此外, 数据格式也未必都是JSON, XML、Protobuf、Thrift, Avro等结构化格式都是可行的。gRPC使用的默认是HTTP/2+Protobuf,其特别之处主要在HTTP/2与HTTP/1.1的区别。
HTTP/1.1 | HTTP/2 | |
---|---|---|
内容编码 | 文本编码 | 二进制编码, 相同信息比文本编码报文更短 |
网络请求方式 | 在同一链接上,多个请求依次发送和接收 | 在同一连接上,多个情况可以流水线发送 |
此外, HTTP/2还新增了header压缩和服务端push等特性。由此可见,gRPC依赖的HTTP/2与HTTP/1的有截然不同的要求, 在实际使用中也要专门处理,其中有独立的HTTP/2相关的协议编解码,应用层的消息编解码等。不过,这些也都被gRPC框架给屏蔽了。关于gRPC本身的实现细节在此不做讨论,我们关注在与SpringBoot的集成。
二、粗暴方案
手动创建相关对象,暴露到