`
m635674608
  • 浏览: 5026715 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

淘宝SOA框架dubbo学习--异步调用

 
阅读更多

直接上代码:

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
 

 

分享到:
评论

相关推荐

    dubbo-user-book.rar_SOA_dubbo_dubbo-user-book_分布式

    而Apache Dubbo,作为一个开源的服务治理框架,正是实现SOA理念的重要工具,它专为Java平台设计,旨在简化分布式服务的开发和管理。 Dubbo的核心特性包括服务治理、高性能通信、服务监控和容错机制。首先,服务治理...

    dubbo-admin-0.2.0.jar

    Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 ...Dubbo默认协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。

    dubbo文档-2017-11-1

    2. 服务调用:Dubbo提供了RPC(Remote Procedure Call)接口,使得服务调用就像调用本地方法一样简单,支持同步、异步、回调等多种调用方式。 3. 服务路由:Dubbo允许根据不同的策略进行服务路由,比如根据服务版本...

    dubbo-demo

    它主要提供面向服务的SOA架构模式,致力于解决因网络异步化导致的服务之间的调用问题,强调服务治理和服务发现,是企业级分布式应用开发的重要工具。 在“dubbo-demo”这个项目中,我们看到的是一个基于Dubbo实现的...

    dubbo-user-book

    总体而言,该Dubbo用户手册不仅为使用Dubbo框架的开发者提供了详细指导,而且也适合那些需要深入理解分布式服务架构和RPC通信机制的读者学习和参考。通过本文档,开发者能够更好地掌握Dubbo的配置和优化,从而在实现...

    dubbo-用户指南.pdf

    - 异步调用、本地存根、本地伪装:提供了异步处理能力和本地代理,以提升性能和用户体验。 - 并发控制、连接控制:为服务调用提供了更细粒度的控制。 - 路由规则、配置规则:允许用户根据特定的规则将服务请求路由到...

    互联网架构 SOA(Dubbo)+配置中心(ZK)+消息中间件MQ(RocketMq)+高-Foundation.zip

    本压缩包中的"互联网架构 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学习总结

    Dubbo是一款高性能、透明化RPC(Remote Procedure Call,远程过程调用)的分布式服务框架。它为分布式系统提供了服务治理能力,致力于解决高性能、透明化的远程服务调用,以及SOA(Service Oriented Architecture,...

    基于dubbo的消费方完整项目示例

    - **异步调用**: 可以通过配置`async`属性启用异步调用,提高系统性能。 - **回调机制**: Dubbo支持回调模式,Consumer可以通过设置回调接口,获取服务调用的结果。 4. **服务治理** - **负载均衡**: Dubbo提供...

    dubbo中文文档说明

    - **异步调用**:通过异步方式调用服务,提高系统的吞吐量。 - **本地调用**:在同一个JVM内进行的服务调用,用于提高性能。 #### 七、API参考手册 - **dubbo:service**:用于声明服务提供者。 - **dubbo:...

    dubbo_user_book

    Dubbo是一个分布式服务框架,旨在提供高性能且透明化的远程过程调用(RPC)服务,是阿里巴巴SOA服务化治理方案的核心框架。它每天能够为超过2000个服务提供超过30亿次的访问支持,被广泛应用在阿里巴巴集团及其成员...

    Dubbo基本原理机制

    Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案。Dubbo 的基本原理机制可以分为以下几个部分: 1. 客户端调用远程接口时,生成一个唯一的 ID,并将方法调用...

    史上最强Dubbo面试26题和答案:核心组件+服务治理+架构设计等

    - **Remoting**:提供了统一的网络通信抽象,支持多种NIO框架,实现同步转异步和请求-响应模式的信息交换。 - **Cluster**:实现了服务集群功能,支持多协议、软负载均衡、失败容错、地址路由等特性。 - **Registry*...

    Dubbo 64道面试题及答案.docx

    SOA(面向服务的架构)应运而生,需要一套服务治理框架来解决服务发现、调用、负载均衡等问题。Dubbo作为一款高性能、轻量级的RPC框架,提供了服务注册、自动发现等功能,并能与Spring无缝集成,降低了分布式系统的...

    Dubbo的技术演进及多语言实践.pptx

    从2008年首次在阿里巴巴内部作为SOA(面向服务的架构)解决方案投入使用,到2011年正式对外开源,再到后来被捐赠给Apache基金会并最终成为Apache的顶级项目,Dubbo的发展历程见证了它从一个内部工具成长为全球广泛...

    Dubbo面试题(2022最新版)

    因此,面向服务的架构(SOA)成为一种趋势,而Dubbo正是为了应对这一挑战而设计的分布式服务框架。通过Dubbo,开发者可以轻松地构建服务提供者和服务消费者,并实现服务间的透明调用,从而简化了分布式系统的开发和...

    Dubbo介绍.pptx

    Dubbo是一款由阿里巴巴开源的分布式服务框架,它的设计目标在于提供一个高性能且透明化的RPC远程服务调用方案,以及一套完整的SOA服务治理解决方案。Dubbo的核心价值在于简化分布式系统的设计与开发,使得开发者能够...

Global site tag (gtag.js) - Google Analytics