Dubbo入门(三)Consumer的编写
前言
本章讲解dubbo中另外一个重要角色Consumer的编写
方法
1.概念
既然我们在上个章节创建了dubbo的服务提供者provider,那么必然是要有消费者进行消费的。
本章将根据dubbo流程图进一步探寻。
consumer可以是java工程也可以是web工程,本次使用最多的web工程进行讲解。
2.创建普通的maven的web工程编写consumer
一般情况下,我们的web工程分为视图层、控制层、服务层和数据访问层。
本次将模拟数据访问层被抽出来进行试验。
1)编写pom.xml
引入ssh所需要的相关jar和dubbo所需要的相关jar,这里给出我的配置:
<project xmlns="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">
<modelVersion>4.0.0</modelVersion>
<groupId>cu.edu.ccut</groupId>
<artifactId>dubbo-web</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.1.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.10</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.2.16.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-ehcache</artifactId>
<version>4.2.16.Final</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
<!-- dubbo相关 -->
<dependency>
<groupId>cn.edu.ccut</groupId>
<artifactId>dubbo-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- <dependency>
<groupId>cn.edu.ccut</groupId>
<artifactId>dubbo-service-impl</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency> -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.5</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.1.0</version>
<exclusions>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.9</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.32.Final</version>
</dependency>
</dependencies>
</project>
2)编写spring、hibernate以及dubbo相关的配置文件
这里为了篇幅的需要,仅仅列举出dubbo的配置文件的编写详情,其他配置文件请读者依据之前的讲解进行配置。
将spring配置文件和dubbo的配置文件按照上述方式起名,目的为了方便加载,配置web.xml文件如下内容:
通过这样的配置使得spring配置文件以及dubbo的配置文件能够同时加载。
dubbo配置文件applicationContext-dubbo.xml的配置内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
<!-- provider的名字 -->
<dubbo:application name="demo-consumer"/>
<!-- dubbo所使用的注册中心 protocol表示是什么注册中心,address代表注册中心ip+端口号 -->
<dubbo:registry address="192.168.1.106:2181" protocol="zookeeper"/>
<!-- 调用对外提供的service接口 -->
<dubbo:reference id="demoService" interface="cn.edu.ccut.dubbo.DemoService"/>
<!-- <dubbo:annotation package="cn.edu.ccut.service.impl"/> -->
</beans>
3)按照传统方式编写控制层和服务层代码
这里使用服务层接口demoService调用远程的服务方法,也就是之前我们编写的getString方法
控制层做如下编写测试:
3.启动consumer工程
注意:确保provider端启动,zk正常接收信息!
项目成功启动后,访问项目地址/test,代码效果如下: