grpc
grpc
grpc 主要玩耍对象就是Google Protobuf
proto 文件也很简单,主要就是定义message, enum, service 这些
和远古时期的WSDL 一样,需要生成stub 代码,而stub 代码一直不舒服,感觉很乱
但proto 生成的stub 代码貌似比印象中的WSDL stub 代码更眉清目秀一些?
在java 中用io.grpc 的几个依赖就可以很快的创建一个GrpcService
项目依赖,和code generator 按照https://github.com/grpc/grpc-java 的README就可以了
stub
生成的Grpc ,在调用时,有blocking, future, stub 几种, 可玩耍比较有意思的是stub , 通过传入一个StreamObServer 对象
然后在onNext 中读取服务端生产的stream 对象, 而服务端可以一直调用onNext 创建对象给调用方
如果没有Flux 这类工具可用,那么可以通过Executors的方式按照时间周期创建对象
http/2
spring framework 5 兼容servlet 4, 这是支持http/2, 但是需要给容器添加配置
看文档说webflux on netty 不支持http/2, 所以不能通过Flux.interval(Duration.ofMillis(200)) 的方式不断的创建stream response
但这是存疑的,看起来spring 官网的文档和github 上的文档写的并不一样
而grpc 默认就是http/2 的, 通过stub 代码,blocking 的方式可以是request/response 的,而stub 的方式可以不断的读取stream response
Rsocket && Grpc
在Rsocket 里面说, Grpc 是好的,但是它没有背压, 所以Rsocket 给添加了背压
Rsocket Rpc 基本是基于Grpc 进行的实现,主要的区别首先是在:
grpc:
1 | <plugin> |
rsocket rpc:
1 | <plugin> |
二者首先在编译参数上的区别
另外的区别再于,生成的stub 代码,有非常大的区别, grpc 的stub 是Observer
而rsocket rpc 基本生成的是Flux/Mono
在对待stream 上的区别也是StreamObserver, Publisher的对应,当然这只是在api 上各自选择的不同
二者在启动rpc 服务和调用rpc服务上也有非常大的不同,这就不写了
– cmonkey 2019年3月29日16:57:48
- 标题: grpc
- 作者: The Redefine Team
- 创建于 : 2019-03-29 16:30:41
- 更新于 : 2023-05-23 18:52:03
- 链接: https://redefine.ohevan.com/2019/03/29/grpc/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。