《Apache Dubbo微服务开发从入门到精通》——高级功能——三、 异步调用(上) https://developer.aliyun.com/article/1225023
4. 使用方式
1) 使用CompletableFuture签名的接口
需要服务提供者事先定义CompletableFuture签名的服务,接口定义指南如下:
Provider端异步执行将阻塞的业务从Dubbo内部线程池切换到业务自定义线程,避免Dubbo线程池的过度占用,有助于避免不同服务间的互相影响。异步执行无异于节省资源或提升RPC响应性能,因为如果业务执行需要阻塞,则始终还是要有线程来负责执行。
注:
Provider端异步执行和Consumer端异步调用是相互独立的,任意正交组合两端配置
• Consumer同步-Provider同步
• Consumer异步-Provider同步
• Consumer同步-Provider异步
• Consumer异步-Provider异步
2) 定义CompletableFuture签名的接口
服务接口定义
服务实现
通过return CompletableFuture.supplyAsync(),业务执行已从Dubbo线程切换到业务线程,避免了对Dubbo线程池的阻塞。
3) 使用AsyncContext
Dubbo提供了一个类似Servlet 3.0的异步接口AsyncContext,在没有CompletableFuture签名接口的情况下,也可以实现Provider端的异步执行。
服务接口定义
服务暴露,和普通服务完全一致
服务实现
注意接口的返回类型是CompletableFuture。
XML引用服务
调用远程服务
《Apache Dubbo微服务开发从入门到精通》——高级功能——三、 异步调用(下) https://developer.aliyun.com/article/1225017