带你读《Apache Dubbo微服务开发从入门到精通》——二、 HTTP/2(Triple)协议(5)

本文涉及的产品
性能测试 PTS,5000VUM额度
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: 带你读《Apache Dubbo微服务开发从入门到精通》——二、 HTTP/2(Triple)协议(5)

《Apache Dubbo微服务开发从入门到精通》——通信协议——二、 HTTP/2(Triple)协议(4) https://developer.aliyun.com/article/1224945



c) Streaming 方式

Java 接口

image.png


实现

public class IStreamGreeterImpl implements IStreamGreeter {
 @Override
 public StreamObserver<HelloRequest> 
sayHello(StreamObserver<HelloReply> replyObserver) {
 return new StreamObserver<HelloRequest>() {
 private List<HelloReply> replyList = new ArrayList<>();
 @Override
 public void onNext(HelloRequest helloRequest) {
 System.out.println("onNext receive request name:" + 
helloRequest.getName());
 replyList.add(HelloReply.newBuilder()
 .setMessage("receive name:" +
helloRequest.getName())
 .build());
 }
 @Override
 public void onError(Throwable cause) {
 System.out.println("onError");
 replyObserver.onError(cause);
 }
 @Override
 public void onCompleted() {
 System.out.println("onComplete receive request size:" 
+ replyList.size());
 for (HelloReply reply : replyList) {
 replyObserver.onNext(reply);
 }
 replyObserver.onCompleted();
 }
 };
 }
}


Provider

image.png


Consumer


public class StreamConsumer {
 public static void main(String[] args) throws 
InterruptedException, IOException {
 ReferenceConfig<IStreamGreeter> ref = new 
ReferenceConfig<>();
 ref.setInterface(IStreamGreeter.class);
 ref.setCheck(false);
 ref.setProtocol(CommonConstants.TRIPLE);
 ref.setLazy(true);
 ref.setTimeout(100000);
 ref.setApplication(new ApplicationConfig("streamconsumer"));
 ref.setRegistry(new RegistryConfig("zookeeper://mse-
6e9fda00-p.zk.mse.aliyuncs.com:2181"));
 final IStreamGreeter iStreamGreeter = ref.get();
 System.out.println("dubbo ref started");
 try {
 StreamObserver<HelloRequest> streamObserver = 
iStreamGreeter.sayHello(new StreamObserver<HelloReply>() {
 @Override
 public void onNext(HelloReply reply) {
 System.out.println("onNext");
 System.out.println(reply.getMessage());
 }
 @Override
 public void onError(Throwable throwable) {
 System.out.println("onError:" + 
throwable.getMessage());
 }
 @Override
 public void onCompleted() {
 System.out.println("onCompleted");
 }
 });
 streamObserver.onNext(HelloRequest.newBuilder()
 .setName("tony")
 .build());
 streamObserver.onNext(HelloRequest.newBuilder()
 .setName("nick")
 .build());
 streamObserver.onCompleted();
 } catch (Throwable t) {
 t.printStackTrace();
 }
 System.in.read();
 }
}


运行 Provider Consumer,可以正常返回

image.png

注:

本文的示例可以在 triple-samples


《Apache Dubbo微服务开发从入门到精通》——通信协议——二、 HTTP/2(Triple)协议(6) https://developer.aliyun.com/article/1224940


相关文章
|
5天前
|
算法 网络协议 安全
HTTP/2 协议的缺点是什么?
HTTP/2 协议的缺点是什么?
|
5天前
|
网络协议 网络安全 网络虚拟化
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算。通过这些术语的详细解释,帮助读者更好地理解和应用网络技术,应对数字化时代的挑战和机遇。
30 3
|
16天前
|
网络协议 安全 Go
Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
【10月更文挑战第28天】Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
44 13
|
9天前
|
传感器 缓存 网络协议
CoAP 协议与 HTTP 协议的区别
CoAP(Constrained Application Protocol)协议是为资源受限的设备设计的轻量级协议,适用于物联网场景。相比HTTP,CoAP具有低功耗、低带宽占用和简单易实现的特点,支持多播通信和无连接的交互模式。
|
14天前
|
开发者
HTTP 协议请求方法的发展历程
【10月更文挑战第21天】
|
14天前
|
安全
HTTP 协议的请求方法
【10月更文挑战第21天】
|
14天前
|
缓存 安全 前端开发
HTTP 协议的请求方法在实际应用中有哪些注意事项?
【10月更文挑战第29天】HTTP协议的请求方法在实际应用中需要根据具体的业务场景和需求,合理选择和使用,并注意各种方法的特点和限制,以确保网络通信的安全、高效和数据的一致性。
|
16天前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
18天前
|
网络协议 前端开发 API
HTTP 和 TCP 协议的应用场景有哪些不同
【10月更文挑战第25天】HTTP(超文本传输协议)和 TCP(传输控制协议)处于网络协议栈的不同层次,各自具有独特的功能和特点,因此它们的应用场景也存在明显的差异。
|
18天前
|
安全 前端开发 JavaScript
利用HTTP协议进行文件上传和下载的常见方法
【10月更文挑战第25天】可以利用HTTP协议方便地实现文件的上传和下载功能,满足不同应用场景下的需求。在实际应用中,还可以根据具体的业务需求和安全要求,对文件上传和下载的过程进行进一步的优化和安全处理。

推荐镜像

更多