《Apache Dubbo微服务开发从入门到精通》——通信协议——二、 HTTP/2(Triple)协议(7) https://developer.aliyun.com/article/1224939
2) 流使用方式
a) Stream流
Stream是Dubbo3新提供的一种调用类型,在以下场景时建议使用流的方式:
• 接口需要发送大量数据,这些数据无法被放在一个RPC的请求或响应中,需要分批发送,但应用层如果按照传统的多次RPC方式无法解决顺序和性能的问题,如果需要保证有序,则只能串行发送。
• 流式场景,数据需要按照发送顺序处理, 数据本身是没有确定边界的。
• 推送类场景,多个消息在同一个调用的上下文中被发送和处理。
Stream分为以下三种:
• SERVER_STREAM(服务端流)
• CLIENT_STREAM(客户端流)
• BIDIRECTIONAL_STREAM(双向流)
注:
由于java语言的限制,BIDIRECTIONAL_STREAM和CLIENT_STREAM的实现是一样的。
在Dubbo3中,流式接口以SteamObserver声明和使用,用户可以通过使用和实现这个接口来发送和处理流的数据、异常和结束。
注:
对于Dubbo2用户来说,可能会对StreamObserver感到陌生,这是Dubbo3定义的一种流类型,Dubbo2中并不存在Stream的类型,所以对于迁移场景没有任何影响。
流的语义保证
• 提供消息边界,可以方便地对消息单独处理
• 严格有序,发送端的顺序和接收端顺序一致
• 全双工,发送不需要等待
• 支持取消和超时
b) Protobuf序列化的流
对于Protobuf序列化方式,推荐编写IDL使用compiler插件进行编译生成。生成的代码大致如下:
《Apache Dubbo微服务开发从入门到精通》——通信协议——二、 HTTP/2(Triple)协议(9) https://developer.aliyun.com/article/1224936