Dubbo入门(三)Consumer的编写

前言

      本章讲解dubbo中另外一个重要角色Consumer的编写

方法

1.概念

既然我们在上个章节创建了dubbo的服务提供者provider,那么必然是要有消费者进行消费的。

本章将根据dubbo流程图进一步探寻。

consumer可以是java工程也可以是web工程,本次使用最多的web工程进行讲解。

2.创建普通的maven的web工程编写consumer

Dubbo入门(三)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的配置文件的编写详情,其他配置文件请读者依据之前的讲解进行配置。

Dubbo入门(三)Consumer的编写

将spring配置文件和dubbo的配置文件按照上述方式起名,目的为了方便加载,配置web.xml文件如下内容:

Dubbo入门(三)Consumer的编写 

通过这样的配置使得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方法Dubbo入门(三)Consumer的编写

控制层做如下编写测试:

Dubbo入门(三)Consumer的编写 

 3.启动consumer工程

注意:确保provider端启动,zk正常接收信息!

Dubbo入门(三)Consumer的编写

项目成功启动后,访问项目地址/test,代码效果如下:

Dubbo入门(三)Consumer的编写