Dubbo之旅--Consumer示例

我们已经对提供者示例进行了详细的阐述,接下来的消费者相对而言比较简单.

1
配置相关pom.xml信息,跟提供者类似,需要相关环境的java包应用.

<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">

<parent>

<artifactId>dubbo-demo</artifactId>

<groupId>org.pactera.dubbo</groupId>

<version>1.0-SNAPSHOT</version>

</parent>

<modelVersion>4.0.0</modelVersion>

<groupId>org.pactera.dubbo</groupId>

<artifactId>dubbo-demo-consumer</artifactId>

<packaging>jar</packaging>

<name>dubbo-demo-consumer</name>

<url>http://maven.apache.org</url>

<properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

</properties>

<dependencies>

<dependency>

<groupId>org.pactera.dubbo</groupId>

<artifactId>dubbo-demo-api</artifactId>

<version>1.0-SNAPSHOT</version>

</dependency>

<dependency>

<groupId>org.pactera.dubbo</groupId>

<artifactId>dubbo-expand-loadbalance</artifactId>

<version>1.0-SNAPSHOT</version>

</dependency>

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>dubbo</artifactId>

<version>2.4.10</version>

</dependency>

<dependency>

<groupId>com.101tec</groupId>

<artifactId>zkclient</artifactId>

<version>0.3</version>

</dependency>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>3.8.1</version>

<scope>test</scope>

</dependency>

</dependencies>

</project>

2
消费者相关的配置文件如下:

/dubbo-demo/dubbo-demo-consumer/src/main/resources/dubbo-demo-consumer.xml

<?xmlversion="1.0" encoding="UTF-8"?>

<beansxmlns="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:applicationname="consumer-of-helloworld-app" />

<!-- 使用multicast广播注册中心暴露发现服务地址 -->

<!--     <dubbo:registryaddress="multicast://224.5.6.7:1234" /> -->

<dubbo:registryprotocol="zookeeper" address="127.0.0.1:2181" />

<dubbo:protocol name="dubbo"port="20884" />

<dubbo:monitorprotocol="registry"></dubbo:monitor>

<!-- 生成远程服务代理,可以和本地bean一样使用demoService-->

<dubbo:referenceid="demoService" interface="org.pactera.dubbo.DemoService"retries="0" timeout="30000" />

</beans>

这里跟提供者不一样的地方,在生成的远程服务代理,可以像调用本地的bean一样使用提供者服务demoService.很好的跟Spring融合在一起.

3  接下来我们需要模拟一个消费者的行为,此行为用来调用demoService服务,从而实现相关的功能,如下文件:

/dubbo-demo/dubbo-demo-consumer/src/main/java/org/pactera/dubbo/DemoServiceConsumer.java

packageorg.pactera.dubbo;

importcom.alibaba.dubbo.rpc.RpcContext;

importlombok.extern.slf4j.Slf4j;

importorg.pactera.dubbo.model.Count;

importorg.pactera.dubbo.thread.DemoServiceConsumerThread;

importorg.springframework.context.support.ClassPathXmlApplicationContext;

importjava.util.concurrent.CountDownLatch;

@Slf4j

publicclass DemoServiceConsumer {

public static void main(String[] args)throws Exception {

ClassPathXmlApplicationContext context= new ClassPathXmlApplicationContext(new String[] {"dubbo-demo-consumer.xml" });

context.start();

DemoService demoService = (DemoService)context.getBean("demoService");

/** 单个测试 */

String resInfo =demoService.sayHello("world");

String serverIP =RpcContext.getContext().getRemoteHost();

int serverPort =RpcContext.getContext().getRemotePort();

System.out.println("rspInfo:" + resInfo + ", response from provider: " + serverIP +"," + serverPort);

}

}

4 启动DemoServiceConsumer模拟一个单次的消费过程.这里输入world.我们可以看一下消费者日志:

5   
此时提供者端收到消费者的请求,提供者日志如下:

到此为止,我们基本上完成了对Dubbo的Provider和Customer的示例,而在实际的项目应用中也是在此基础之上不断的增加服务,基本上的原理和配置本篇和上篇的示例基本上可以满足需求,但是还有一些特殊的需求和在实际开发项目中遇到的问题,这些就不够了,还需要对Dubbo的一些深层的配置和属性进行了解.

时间: 2024-08-24 20:08:11

Dubbo之旅--Consumer示例的相关文章

Dubbo之旅--Provider示例

在本篇文章中我们将通过集体的示例来对Dubbo的提供和消费进行代码层面的认识.这里所介绍的是基本的提供者和消费者通过Spring容器来进行相关的提供和消费的服务.首先看整个示例的项目结构如下: 我们通过Maven的方式来进行示例,其中dubbo-demo-api为提供者所定义的接口,项目结构如下: 此项目里的内容很简单,为服务的一个接口DemoService: /dubbo-demo/dubbo-demo-api/src/main/java/org/pactera/dubbo/DemoServi

Dubbo之旅--内部逻辑

在没有开始用代码来解释之前,用图最能够表达一些关系,关于Dubbo的内部逻辑调用关系,借用官方的图示来说明一下,如下图 通过上图中的一个个方框我们称之为节点,总共有5个节点,这五个节点可以看成五个角色,每个角色都有一定的功能.每个角色的意思如下: Provider: 暴露服务的服务提供方. 在实际项目中一般称这个角色为提供者.它主要是向注册中心注册其提供的服务,并汇报调用时间到监控中心,此时间不包含网络开销. Consumer: 调用远程服务的服务消费方. 既然有提供者,对应的这就是消费者.服务

Dubbo之旅--管理控制台

到现在为止我们的Dubbo之旅让我们对Dubbo跟注册中心有了初步的认识,接下来要分享的是Dubbo的管理控制台,在实际的项目中非常的有用,尤其是在dubbo服务提供数量逐渐加大的情况下,通过Dubbo管理控制台能够很好的被我们所用,从而让我们更好的使用Dubbo提供的服务. 首先需要准备Dubbo-Admin管理控制台程序,本人是通过项目的形式将控制台导入Eclipse中,通过Eclipse的方式来启动tomcat服务.当然也可以直接将程序的war包放入Tomcat的webapps中,直接启动

一步步完成Maven+Spring+Dubbo+Zookeeper的整合示例

本文给出一个整合Maven+Spring+Dubbo+Zookeeper的示例,并且一步步给出完成步骤,并对其中可能遇到的问题进行解决~ Maven模块化 创建一个名为dubbo-demo的Maven工程,该工程包含三个模块 dubbo-demo-interface   (定义对外开放接口) dubbo-demo-provider   (接口实现) dubbo-demo-consumer (接口调用) dubbo-demo工程中的pom.xml文件如下: <project xmlns="h

Dubbo -- 系统学习 笔记 -- 示例 -- 多注册中心

Dubbo -- 系统学习 笔记 -- 目录 示例 想完整的运行起来,请参见:快速启动,这里只列出各种场景的配置方式 多注册中心 可以自行扩展注册中心,参见:注册中心扩展 (1) 多注册中心注册 比如:中文站有些服务来不及在青岛部署,只在杭州部署,而青岛的其它应用需要引用此服务,就可以将服务同时注册到两个注册中心. XML : provider.xml <?xml version="1.0" encoding="UTF-8"?> <beans xm

初识Dubbo 系列之7-Dubbo 示例

示例 想完整的运行起来,请参见:快速启动 (+),这里只列出各种场景的配置方式 以下示例全部使用基于Spring的Xml配置 (+)作为参考,如果不想使用Spring,而希望通过API的方式进行调用,请参见:API配置 (+) 启动时检查 (+) (#) Dubbo缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止Spring初始化完成,以便上线时,能及早发现问题,默认check=true. 如果你的Spring容器是懒加载的,或者通过API编程延迟引用服务,请关闭check,否则

Dubbo之旅--结果缓存

在上篇文章中我们队Dubbo的扩展进行了一些基本了解.这些扩展能够很好的帮助我们在实际的项目中发挥作用,接下来对于dubbo的一些高级特征,针对特殊情况而进行的处理进行进一步的介绍,这里我们要说的是结果缓存. 为什么要用到结果缓存,主要是用于加速热门数据的访问速度,Dubbo提供声明式缓存,以减少用户加缓存的工作量. 下面我们将通过一个例子来对结果缓存进行一个接触. 1.客户端和服务提供端共用接口类 packagecom.alibaba.dubbo.demo; public interfaceC

Dubbo之旅--扩展协议

在实际工作中运用dubbo的时候,以上系列的文章基本上能够满足项目的基本需求,当然,对于一些特殊的需求Dubbo可以对其进行扩展,Dubbo拥有者丰富的扩展内容,这次主要将会带领大家去感受一下Dubbo的协议扩展和注册中心扩展. 首先要说的是协议扩展. 为什么要扩展协议呢?什么样的需求需要我们去扩展它? (1) 不同服务不同协议 需求:不同服务在性能上适用不同协议进行传输,比如大数据用短连接协议,小数据大并发用长连接协议. consumer.xml <?xmlversion="1.0&qu

Dubbo之旅--扩展注册中心

在上篇文章中我们介绍了关于协议的扩展,并了解扩展它所需要的需求.本篇主要是对注册中心的扩展进行着重的探索. 同样的问题,为什么我们需要去扩展注册中心的?主要有以下三个需求. (1) 多注册中心注册 需求:xx银行有些服务来不及在上海部署,只在北京部署,而上海的其它应用需要引用此服务,就可以将服务同时注册到两个注册中心. consumer.xml <?xmlversion="1.0"encoding="UTF-8"?> <beansxmlns=&qu