dubbo的几种异步调用

本文详细介绍了Dubbo的几种异步调用方式,包括通过RpcContext获取Future对象、设置Future回调方法、2.7.*版本的CompletableFuture支持、服务端异步执行以及使用AsyncContext实现异步执行。每种方法都结合实例解析了其工作原理和注意事项,展示了如何利用这些特性优化调用流程,避免阻塞主线程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

同步调用 是指调用线程在服务提供方返回结果前需要被阻塞,异步调用则是消费端发起调用后会马上返回。 (然后服务方处理完成之后,通过回调的形式将结果告知给消费方。)

在dubbo 2.6.*版本中

1.通过RpcContext.getContext().getFuture()来获取到 Future对象,然后通过

Future.get()方法获取到结果

案例

服务提供者

 public static void main(String[] args) throws IOException {
        //创建ServiceConfig实例
        ServiceConfig<GreetingService> serviceConfig=new ServiceConfig<GreetingService>();

        //设置应用程序配置
        serviceConfig.setApplication(new ApplicationConfig("first-dubbo-provider"));

        //设置服务注册中心信息
        RegistryConfig registryConfig=new RegistryConfig("multicast://224.5.6.7:1234");
        serviceConfig.setRegistry(registryConfig);

        //设置接口与实现类
        serviceConfig.setInterface(GreetingService.class);
        serviceConfig.setRef(new GreetingServiceImpl());


        //设置服务分组与版本
        serviceConfig.setVersion("1.0.0");
        serviceConfig.setGroup("dubbo");
        
        //导出服务
        //启动了nettyServer监听请求,并将服务注册到服务注册中心
        serviceConfig.export();

        //挂起线程 避免服务停止
        System.out.println("server is started");
        System.in.read();
    }

服务消费者

 public static void main(String[] args) throws ExecutionException, InterruptedException {
        //创建服务引用对象实例
        ReferenceConfig<GreetingService> referenceConfig=new ReferenceConfig<GreetingService>();
        //设置应用信息
        referenceConfig.setApplication(new ApplicationConfig("first-dubbo-consumer"));
        //设置服务注册中心 zookeeper://127.0.0.1:2181   广播模式 multicast://224.5.6.7:1234
        referenceConfig.setRegistry(new RegistryConfig("multicast://224.5.6.7:1234"));
        //设置服务接口和超时时间
        referenceConfig.setInterface(GreetingService.class);
        referenceConfig.setTimeout(5000);
        
        //设置服务分组与版本
        referenceConfig.setVersion("1.0.0");
        referenceConfig.setGroup("dubbo");
        //设置为异步
        referenceConfig.setAsync(true);
        //引用服务
        GreetingService greetingService=referenceConfig.get();
        //设置隐式参数
        RpcContext.getContext().setAttachment("company","alibaba");
        //调用服务
        System.out.println(greetingService.sayHello("world")
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值