Dubbo中CompletableFuture异步调用

使用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,对异步结果的获取采用了回调的方式
原文地址:https://www.cnblogs.com/edda/p/13260432.html