概念
官网地址:http://dubbo.apache.org/zh/docs/v2.7/user/examples/async-call/
异步调用就是利用了Java的多线程异步调用类
代码地址
https://gitee.com/zjj19941/ZJJ_Dubbo.git 下的 async-call 就是异步调用的代码demo案例
代码演示
interface项目
返回值是CompletableFuture
package com.zjj;
import java.util.concurrent.CompletableFuture;
public interface DemoService {
// 异步调用方法
CompletableFuture<String> sayHelloAsync(String name) ;
}
provider项目
实现interface的接口,在方法内部使用CompletableFuture异步处理
package com.zjj.provider.service;
import com.zjj.DemoService;
import org.apache.dubbo.config.annotation.Service;
import java.util.concurrent.CompletableFuture;
@Service(version = "default")
public class DefaultDemoService implements DemoService {
@Override
public CompletableFuture<String> sayHelloAsync(String name) {
System.out.println("执行了异步服务,参数 : " + name);
return CompletableFuture.supplyAsync(() -> {
return "异步执行完了"; // 正常访问
});
}
}
consumer项目
package com.zjj;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import java.util.concurrent.CompletableFuture;
public class DubboConsumerDemo {
//@Reference注解就是用于标记这个服务具体使用了生产者的哪个接口实现
(version = "default")
private DemoService demoService;
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(DubboConsumerDemo.class);
DemoService demoService = context.getBean(DemoService.class);
// 调用直接返回CompletableFuture
CompletableFuture<String> future = demoService.sayHelloAsync("异步调用"); // 5
System.out.println("1.在执行别的业务逻辑......");
future.whenComplete((v, t) -> {
if (t != null) {
t.printStackTrace();
} else {
System.out.println("3.异步调用provider结果 : " + v);
}
});
System.out.println("2.结束了");
}
}
执行结果
消费者控制台:
1.在执行别的业务逻辑......
2.结束了
3.异步调用provider结果 : 异步执行完了
你会发现消费者那里并没有等CompletableFuture future = demoService.sayHelloAsync(“异步调用”);执行完,而是接着执行别的业务逻辑了,直到provider执行完了之后,返回了CompletableFuture,然后在whenComplete方法里面拿取到了结果
dubbo其它异步方式
参考别人的文章: https://mp.weixin.qq.com/s/U3eyBUy6HBVy-xRw3LGbRQ