直接上代码:
1、服务提供端及客户端共享代码
1
2
3
4
5
|
package com.alibaba.dubbo.demo;
public interface DemoService2 {
Person getPersion(String name);
} |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
package com.alibaba.dubbo.demo;
import java.io.Serializable;
public class Person implements Serializable {
private static final long serialVersionUID = -8994496944734041861L;
private int age;
private String name;
public int getAge() {
return age;
}
public void setAge( int age) {
this .age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this .name = name;
}
@Override
public String toString() {
return "Person [age=" + age + ", name=" + name + "]" ;
}
} |
2、客户端代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
import java.util.concurrent.Future;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.alibaba.dubbo.demo.DemoService2;
import com.alibaba.dubbo.demo.Person;
import com.alibaba.dubbo.rpc.RpcContext;
public class Consumer {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
new String[] { "classpath:consumer.xml" });
context.start();
// 异步调用示例
DemoService2 demoService2 = (DemoService2) context.getBean( "demoService2" );
Person p = demoService2.getPersion( "hanshubo" );
System.out.println(p);
Future<Person> pFuture = RpcContext.getContext().getFuture();
p = pFuture.get();
System.out.println(p);
}
} |
3、客户端配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
<?xml version= "1.0" encoding= "UTF-8" ?>
<beans xmlns= "http://www.springframework.org/schema/beans"
xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo= "http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http: //www.springframework.org/schema/beans
http: //www.springframework.org/schema/beans/spring-beans.xsd
http: //code.alibabatech.com/schema/dubbo
http: //code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
<dubbo:application name= "consumer-of-helloworld-app" />
<!-- 使用zookeeper注册中心暴露发现服务地址 -->
<dubbo:registry address= "zookeeper://127.0.0.1:2181" />
<!-- 生成远程服务代理 -->
<dubbo:reference id= "demoService" interface = "com.alibaba.dubbo.demo.DemoService" retries= "2" />
<!-- 生成远程服务代理 -->
<dubbo:reference id= "validationService" interface = "com.alibaba.dubbo.demo.ValidationService"
retries= "2" validation= "true"
/>
<!-- 生成远程服务代理 -->
<dubbo:reference id= "demoService2" interface = "com.alibaba.dubbo.demo.DemoService2" async= "true" />
</beans> |
注:重点关注下面这行代码,就OK啦
1
|
async= "true"
|
4、服务提供端代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
package com.alibaba.dubbo.demo.provider;
import com.alibaba.dubbo.demo.DemoService2;
import com.alibaba.dubbo.demo.Person;
public class DemoService2Impl implements DemoService2 {
@Override
public Person getPersion(String name) {
Person r = new Person();
r.setAge( 123 );
r.setName(name);
return r;
}
} |
4、服务提供端配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
<?xml version= "1.0" encoding= "UTF-8" ?>
<beans xmlns= "http://www.springframework.org/schema/beans"
xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo= "http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http: //www.springframework.org/schema/beans
http: //www.springframework.org/schema/beans/spring-beans.xsd
http: //code.alibabatech.com/schema/dubbo
http: //code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name= "hello-world" />
<!-- 使用zookeeper注册中心暴露发现服务地址 -->
<dubbo:registry address= "zookeeper://127.0.0.1:2181" />
<!-- 用dubbo协议在 20880 端口暴露服务 -->
<dubbo:protocol name= "dubbo" port= "20880" />
<!-- 声明需要暴露的服务接口 -->
<dubbo:service interface = "com.alibaba.dubbo.demo.DemoService" ref= "demoService" />
<!-- 和本地bean一样实现服务 -->
<bean id= "demoService" class = "com.alibaba.dubbo.demo.provider.DemoServiceImpl" />
<!-- 声明需要暴露的服务接口 -->
<dubbo:service interface = "com.alibaba.dubbo.demo.ValidationService" ref= "validationService" />
<!-- 和本地bean一样实现服务 -->
<bean id= "validationService" class = "com.alibaba.dubbo.demo.provider.ValidationServiceImpl" />
<bean id= "cacheService" class = "com.alibaba.dubbo.demo.provider.CacheServiceImpl" />
<dubbo:service interface = "com.alibaba.dubbo.demo.CacheService" ref= "cacheService" />
<!-- 声明需要暴露的服务接口 -->
<dubbo:service interface = "com.alibaba.dubbo.demo.DemoService2" ref= "demoService2" />
<!-- 和本地bean一样实现服务 -->
<bean id= "demoService2" class = "com.alibaba.dubbo.demo.provider.DemoService2Impl" />
</beans> |
5、也可以设置是否等待消息发出:(异步总是不等待返回)
-
sent="true" 等待消息发出,消息发送失败将抛出异常。
-
sent="false" 不等待消息发出,将消息放入IO队列,即刻返回。
-
1
<dubbo:method name=
"findFoo"
async=
"true"
sent=
"true"
/>
6、如果你只是想异步,完全忽略返回值,可以配置return="false",以减少Future对象的创建和管理成本:
1
|
<dubbo:method name= "findFoo" async= "true" return = "false" />
http://my.oschina.net/hanshubo/blog/378111
|
相关推荐
而Apache Dubbo,作为一个开源的服务治理框架,正是实现SOA理念的重要工具,它专为Java平台设计,旨在简化分布式服务的开发和管理。 Dubbo的核心特性包括服务治理、高性能通信、服务监控和容错机制。首先,服务治理...
Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 ...Dubbo默认协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。
2. 服务调用:Dubbo提供了RPC(Remote Procedure Call)接口,使得服务调用就像调用本地方法一样简单,支持同步、异步、回调等多种调用方式。 3. 服务路由:Dubbo允许根据不同的策略进行服务路由,比如根据服务版本...
它主要提供面向服务的SOA架构模式,致力于解决因网络异步化导致的服务之间的调用问题,强调服务治理和服务发现,是企业级分布式应用开发的重要工具。 在“dubbo-demo”这个项目中,我们看到的是一个基于Dubbo实现的...
总体而言,该Dubbo用户手册不仅为使用Dubbo框架的开发者提供了详细指导,而且也适合那些需要深入理解分布式服务架构和RPC通信机制的读者学习和参考。通过本文档,开发者能够更好地掌握Dubbo的配置和优化,从而在实现...
- 异步调用、本地存根、本地伪装:提供了异步处理能力和本地代理,以提升性能和用户体验。 - 并发控制、连接控制:为服务调用提供了更细粒度的控制。 - 路由规则、配置规则:允许用户根据特定的规则将服务请求路由到...
本压缩包中的"互联网架构 SOA(Dubbo)+配置中心(ZK)+消息中间件MQ(RocketMq)+高-Foundation"提供了一个基于SOA的解决方案,结合了阿里巴巴的Dubbo服务框架、Zookeeper配置中心以及RocketMQ消息中间件。...
数组元素的操作2015年2月12日 - 淘宝SOA框架dubbo学习(7)--异步调用:直接上代码: 1、服务提供端及客户端共享代码 package com.alibaba.dubbo.demo; public interface D...
Dubbo是一款高性能、透明化RPC(Remote Procedure Call,远程过程调用)的分布式服务框架。它为分布式系统提供了服务治理能力,致力于解决高性能、透明化的远程服务调用,以及SOA(Service Oriented Architecture,...
- **异步调用**: 可以通过配置`async`属性启用异步调用,提高系统性能。 - **回调机制**: Dubbo支持回调模式,Consumer可以通过设置回调接口,获取服务调用的结果。 4. **服务治理** - **负载均衡**: Dubbo提供...
- **异步调用**:通过异步方式调用服务,提高系统的吞吐量。 - **本地调用**:在同一个JVM内进行的服务调用,用于提高性能。 #### 七、API参考手册 - **dubbo:service**:用于声明服务提供者。 - **dubbo:...
Dubbo是一个分布式服务框架,旨在提供高性能且透明化的远程过程调用(RPC)服务,是阿里巴巴SOA服务化治理方案的核心框架。它每天能够为超过2000个服务提供超过30亿次的访问支持,被广泛应用在阿里巴巴集团及其成员...
Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案。Dubbo 的基本原理机制可以分为以下几个部分: 1. 客户端调用远程接口时,生成一个唯一的 ID,并将方法调用...
- **Remoting**:提供了统一的网络通信抽象,支持多种NIO框架,实现同步转异步和请求-响应模式的信息交换。 - **Cluster**:实现了服务集群功能,支持多协议、软负载均衡、失败容错、地址路由等特性。 - **Registry*...
SOA(面向服务的架构)应运而生,需要一套服务治理框架来解决服务发现、调用、负载均衡等问题。Dubbo作为一款高性能、轻量级的RPC框架,提供了服务注册、自动发现等功能,并能与Spring无缝集成,降低了分布式系统的...
从2008年首次在阿里巴巴内部作为SOA(面向服务的架构)解决方案投入使用,到2011年正式对外开源,再到后来被捐赠给Apache基金会并最终成为Apache的顶级项目,Dubbo的发展历程见证了它从一个内部工具成长为全球广泛...
因此,面向服务的架构(SOA)成为一种趋势,而Dubbo正是为了应对这一挑战而设计的分布式服务框架。通过Dubbo,开发者可以轻松地构建服务提供者和服务消费者,并实现服务间的透明调用,从而简化了分布式系统的开发和...
Dubbo是一款由阿里巴巴开源的分布式服务框架,它的设计目标在于提供一个高性能且透明化的RPC远程服务调用方案,以及一套完整的SOA服务治理解决方案。Dubbo的核心价值在于简化分布式系统的设计与开发,使得开发者能够...