使用Future實現異步調用,對於無需獲取返回值的操作來說不存在問題,但消費者若需要獲取到最終的異步執行結果,則會出現問題:消費者在使用Future的get()方法獲取返回值時被阻塞。為了解決這個問題,Dubbo又引入了CompletableFuture來實現對提供者的異步調用
一、創建提供者10-provider-async2
A、創建工程
直接復制10-provider-async工程,並命名為10-provider-async2
B、修改業務接口
需要異步調用執行的方法返回CompletableFuture<>
C、修改實現類
二、 創建消費者10-consumer-async2
A、創建工程
直接復制10-consumer-async工程,並命名為10-consumer-async2
B、修改業務接口
C、修改消費者類
直接刪除同步消費者類,修改異步消費者類
D、修改配置文件
三、總結
Future與CompletableFuture的對比
- Future:Dubbo2.7.0版本之前消費者異步調用提供者的實現方式。源自於JDK5,對異步結果的獲取采用了阻塞與輪詢方式。
- CompletableFuture:Dubbo2.7.0版本之后消費者異步調用提供者的實現方式。源自於JDK8,對異步結果的獲取采用了回調的方式