dubbo高级应用异步调用(可以实现类似循环屏障)
1,消费端配置好异步调用声明
2,调用一个异步方法马上getfuthure,此时wait,这个有返回后再向下调用另一个异步方法,这样即可都完成才结束大的任务
异步就是在于不等待请求发出就向下,直接用一个新建的future等,有返回自动会写到future,但是要自己拿,用future拿的时候没拿到就会等了(可设置等待时间),这样一来利用上了主线程执行任务的时间给子线程去返回
// 如果foo需要5秒返回,bar需要6秒返回,实际只需等6秒,即可获取到foo和bar,进行接下来的处理。
异步调用
配置声明:
consumer.xml
< dubbo:reference id = "fooService" interface = "com.alibaba.foo.FooService" >
< dubbo:method name = "findFoo" async = "true" />
</ dubbo:reference >
< dubbo:reference id = "barService" interface = "com.alibaba.bar.BarService" >
< dubbo:method name = "findBar" async = "true" />
</ dubbo:reference >
|
调用代码:
fooService.findFoo(fooId); // 此调用会立即返回null
Future<Foo> fooFuture = RpcContext.getContext().getFuture(); // 拿到调用的Future引用,当结果返回后,会被通知和设置到此Future。
barService.findBar(barId); // 此调用会立即返回null
Future<Bar> barFuture = RpcContext.getContext().getFuture(); // 拿到调用的Future引用,当结果返回后,会被通知和设置到此Future。
// 此时findFoo和findBar的请求同时在执行,客户端不需要启动多线程来支持并行,而是借助NIO的非阻塞完成。 Foo foo = fooFuture.get(); // 如果foo已返回,直接拿到返回值,否则线程wait住,等待foo返回后,线程会被notify唤醒。
Bar bar = barFuture.get(); // 同理等待bar返回。
// 如果foo需要5秒返回,bar需要6秒返回,实际只需等6秒,即可获取到foo和bar,进行接下来的处理。 |
你也可以设置是否等待消息发出:(异步总是不等待返回)
- sent="true" 等待消息发出,消息发送失败将抛出异常。
- sent="false" 不等待消息发出,将消息放入IO队列,即刻返回。
<
dubbo:method
name
=
"findFoo"
async
=
"true"
sent
=
"true"
/>
如果你只是想异步,完全忽略返回值,可以配置return="false",以减少Future对象的创建和管理成本:
< dubbo:method name = "findFoo" async = "true" return = "false" />
|
相关推荐
它涵盖了从基础概念到实战技巧的多个层面,帮助开发者深入理解并有效应用异步调用技术。 【标签】:“Dubbo异步调用的优化共20页” 在分布式系统中,Dubbo是一个广泛使用的Java RPC框架,它提供了高性能、轻量级的...
对原有的dubbo远程调用的异步的缺陷性进行了优化方案
1、Dubbo 远程调用实现 2、内带zookeeper-3.4.5消息服务 3、直接导入myeclipse运行:dubbo-server导入tomcat中运行 4、dubbo-client 运行测试类/dubbo-client/src/com/fengjx/main/Consumer.java
标题中的“nodejs使用原生的dubbo协议打通了dubbo的rpc方法调用”意味着在Node.js环境中,开发者成功地实现了对Dubbo服务的RPC(远程过程调用)访问,利用了Dubbo协议的特性。Dubbo是阿里巴巴开源的一个高性能、轻量...
5-42 业务系统集成Dubbo异步调用实现(2).mp4
2. **提供者(Provider)**:服务提供方,实现了服务接口并暴露服务,通过Dubbo服务注册中心让其他应用能够找到。 3. **消费者(Consumer)**:服务消费方,调用远程服务,就像本地调用一样,无需关心服务的具体...
实现Springcloud向dubbo项目的接口调用。 FeignToDubbo-starter模块负责利用Feign将底层的Http协议转化为dubbo协议,供SpringCloud项目使用。引入FeignToDubbo-starter后会引入dubbo的依赖,使用注解DubboRefence...
### Dubbo高级视频教程知识点概览 #### 一、Dubbo概述与分布式系统基础 - **Dubbo简介**:Dubbo是一款高性能、轻量级的开源Java RPC框架,旨在为服务治理提供简单、全面的解决方案。 - **分布式系统概念**:分布式...
针对dubbo分布式调用链系统实现_3
dubbo双模块RPC调用,附源码及编译后内容,解压即可用;dubbo.rpc.demo.rar;dubbo双模块RPC调用,附源码及编译后内容,解压即可用;dubbo.rpc.demo.rar;dubbo双模块RPC调用,附源码及编译后内容,解压即可用;...
当涉及到Web应用时,Dubbo可以通过Servlet容器(如Tomcat)运行。配置Web应用中的Spring上下文加载Dubbo配置,通常在`web.xml`中添加`dubbo-context`监听器: ```xml <listener-class>org.springframework.web....
在现代微服务架构中,Spring Boot以其简洁的配置和快速的应用开发能力被广泛应用,而Dubbo作为阿里巴巴开源的高性能服务框架,致力于提供高性能和透明化的RPC(远程过程调用)服务。本教程将详细讲解如何将Spring ...
在Java应用中,只需几行代码,就可以实现Groovy脚本的编译和执行: ```java GroovyShell shell = new GroovyShell(); Script script = shell.parse(new File("path/to/your/groovy/script.groovy")); script.run();...
在分布式系统中,尤其是采用了像Dubbo...总之,"dubbo分布式应用日志追踪"是解决分布式系统监控和故障排查的重要手段,通过结合Dubbo的SPI和MDC,我们可以有效地跟踪和分析服务间的调用,提升系统的可维护性和稳定性。
本文将深入探讨Dubbo的核心特性,包括其与Spring的整合、服务导出、服务调用、可扩展机制SPI以及基本和高级应用。 首先,让我们从35-Dubbo框架介绍与手写模拟Dubbo开始。Dubbo由阿里巴巴开源,其设计目标是提供一个...
通过以上步骤,我们可以在 RabbitMQ 中实现类似于 Dubbo 的 RPC 调用,并结合 SpringBoot 实现消息重试机制,以提供更加稳定可靠的分布式系统通信。理解并熟练运用这些概念和技术,能够帮助我们构建高效、容错的...
1. **RabbitMQ的工作队列模式**:在这种模式下,多个消费者可以连接到同一个队列,但每个消息只会被一个消费者消费,这样可以实现任务的负载均衡。我们将利用这一点来构建RPC的请求-响应流程。 2. **模拟RPC步骤**...