dubbo(提供者、消费者)基于java的实现

  • 2019 年 10 月 8 日
  • 笔记

1、安装好jdk、zookeeper以后可以尝试开发代码进行dubbo的学习和练习。

首先创建Dubbo的Provider配置。创建一个maven project工程。

RPC框架,不希望Consumer知道具体实现.如果实现类和接口在同一个项目中,Consumer依赖这个项目时,就会知道实现类具体实现。

所以Provider和Consumer创建不同的项目。

然后接口项目包里面创建一个接口,并提供一个简单的接口方法。

2、然后创建Dubbo的Provider配置。创建一个maven project工程。

为了可以引用dubbo-service项目包,需要将dubbo-service的项目坐标加进来。

配置maven的pom.xml文件。

 1 <project xmlns="http://maven.apache.org/POM/4.0.0"   2     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   3     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0   4     http://maven.apache.org/xsd/maven-4.0.0.xsd">   5     <modelVersion>4.0.0</modelVersion>   6     <groupId>com.bie</groupId>   7     <artifactId>dubbo-service-impl</artifactId>   8     <version>0.0.1-SNAPSHOT</version>   9  10     <!-- 为了可以引用dubbo-service项目包,需要将dubbo-service的项目坐标加进来 -->  11     <dependencies>  12         <dependency>  13             <groupId>com.bie</groupId>  14             <artifactId>dubbo-service</artifactId>  15             <version>0.0.1-SNAPSHOT</version>  16         </dependency>  17         <!-- https://mvnrepository.com/artifact/com.alibaba/dubbo -->  18         <!-- dubbo -->  19         <dependency>  20             <groupId>com.alibaba</groupId>  21             <artifactId>dubbo</artifactId>  22             <version>2.5.3</version>  23             <!-- 排除dubbot2.5.3版本的spring2.5.6版本,依赖dubbo,去掉老版本spring -->  24             <exclusions>  25                 <exclusion>  26                     <groupId>org.springframework</groupId>  27                     <artifactId>spring</artifactId>  28                 </exclusion>  29             </exclusions>  30         </dependency>  31         <!-- spring,依赖新版本spring -->  32         <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->  33         <dependency>  34             <groupId>org.springframework</groupId>  35             <artifactId>spring-webmvc</artifactId>  36             <version>4.1.6.RELEASE</version>  37         </dependency>  38         <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->  39         <dependency>  40             <groupId>org.springframework</groupId>  41             <artifactId>spring-context</artifactId>  42             <version>4.1.6.RELEASE</version>  43         </dependency>  44         <!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->  45         <dependency>  46             <groupId>org.springframework</groupId>  47             <artifactId>spring-core</artifactId>  48             <version>4.1.6.RELEASE</version>  49         </dependency>  50         <!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->  51         <dependency>  52             <groupId>org.springframework</groupId>  53             <artifactId>spring-web</artifactId>  54             <version>4.1.6.RELEASE</version>  55         </dependency>  56         <!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->  57         <dependency>  58             <groupId>org.springframework</groupId>  59             <artifactId>spring-beans</artifactId>  60             <version>4.1.6.RELEASE</version>  61         </dependency>  62         <!-- https://mvnrepository.com/artifact/org.springframework/spring-aop -->  63         <dependency>  64             <groupId>org.springframework</groupId>  65             <artifactId>spring-aop</artifactId>  66             <version>4.1.6.RELEASE</version>  67         </dependency>  68         <!-- <dependency>  69             <groupId>org.apache.zookeeper</groupId>  70             <artifactId>zookeeper</artifactId>  71             <version>3.4.7</version>  72         </dependency>  73         <dependency>  74             <groupId>com.github.sgroschupf</groupId>  75             <artifactId>zkclient</artifactId>  76             <version>0.1</version>  77         </dependency> -->  78         <!-- https://mvnrepository.com/artifact/com.101tec/zkclient -->  79         <!-- 访问zookeeper客户端jar包,依赖zookeeper客户端工具zkClient -->  80         <dependency>  81             <groupId>com.101tec</groupId>  82             <artifactId>zkclient</artifactId>  83             <version>0.10</version>  84         </dependency>  85  86     </dependencies>  87  88 </project>

创建实现接口的实现类:

 1 package com.bie.impl;   2   3 import com.bie.service.UserService;   4   5 /**   6  *   7  * @author biehl   8  *   9  *         UserServiceImpl实现UserService接口  10  */  11 public class UserServiceImpl implements UserService {  12  13     public String showUser(String name) {  14         String str = "您好,您的姓名是:" + name;  15         return str;  16     }  17  18 }

配置applicationContext-dubbo.xml配置文件。

 1 <?xml version="1.0" encoding="UTF-8"?>   2 <beans xmlns="http://www.springframework.org/schema/beans"   3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   4     xmlns:context="http://www.springframework.org/schema/context"   5     xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"   6     xsi:schemaLocation="http://www.springframework.org/schema/beans   7     http://www.springframework.org/schema/beans/spring-beans.xsd   8         http://www.springframework.org/schema/context   9         http://www.springframework.org/schema/context/spring-context.xsd  10         http://code.alibabatech.com/schema/dubbo  11         http://code.alibabatech.com/schema/dubbo/dubbo.xsd">  12  13     <!-- 1、首先给当前的provider起一个名称,方便监控中心进行监控,给provider起名,在monitor或管理工具中区别是哪个provider -->  14     <dubbo:application name="dubbo-service-impl" />  15     <!-- 2、配置注册中心,protocol="zookeeper"代表了是dubbo协议,protocol使用哪种注册中心,地址是192.168.110.140:2181,address注册中心的ip和端口,配置注册中心 -->  16     <dubbo:registry address="192.168.110.140:2181"  17         protocol="zookeeper"></dubbo:registry>  18     <!-- 3、配置端口,name="dubbo"代表从注册中心获取到值,port="20880"是consumer访问provider使用的。配置协议,name 使用什么协议, port: consumer invoke provider时的端口号 -->  19     <dubbo:protocol name="dubbo" port="20880"></dubbo:protocol>  20     <!-- 4、注册功能,注册是注册接口,不是注册实现类的,ref=""代表的是实现类的bean。注册接口, ref 引用接口实现类<bean>的id值 -->  21     <dubbo:service interface="com.bie.service.UserService"  22         ref="userServiceImpl"></dubbo:service>  23  24     <!-- 注册UserService的bean对象 -->  25     <bean id="userServiceImpl" class="com.bie.impl.UserServiceImpl"></bean>  26  27 </beans>        

测试类如下所示:

3、然后创建Dubbo的Consumer配置。创建一个maven project工程。

将提供者的pom文件直接拷贝过来就可以直接使用的。因为是war包,自己在webapp下面创建WEB-INF文件夹,然后在WEB-INF下面创建web.xml即可。

 1 <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">   2   <modelVersion>4.0.0</modelVersion>   3   <groupId>com.bie</groupId>   4   <artifactId>dubbo-consumer</artifactId>   5   <version>0.0.1-SNAPSHOT</version>   6   <packaging>war</packaging>   7   8   <!-- 为了可以引用dubbo-service项目包,需要将dubbo-service的项目坐标加进来 -->   9     <dependencies>  10         <dependency>  11             <groupId>com.bie</groupId>  12             <artifactId>dubbo-service</artifactId>  13             <version>0.0.1-SNAPSHOT</version>  14         </dependency>  15         <!-- https://mvnrepository.com/artifact/com.alibaba/dubbo -->  16         <!-- dubbo -->  17         <dependency>  18             <groupId>com.alibaba</groupId>  19             <artifactId>dubbo</artifactId>  20             <version>2.5.3</version>  21             <!-- 排除dubbot2.5.3版本的spring2.5.6版本 -->  22             <exclusions>  23                 <exclusion>  24                     <groupId>org.springframework</groupId>  25                     <artifactId>spring</artifactId>  26                 </exclusion>  27             </exclusions>  28         </dependency>  29         <!-- spring -->  30         <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->  31         <dependency>  32             <groupId>org.springframework</groupId>  33             <artifactId>spring-webmvc</artifactId>  34             <version>4.1.6.RELEASE</version>  35         </dependency>  36         <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->  37         <dependency>  38             <groupId>org.springframework</groupId>  39             <artifactId>spring-context</artifactId>  40             <version>4.1.6.RELEASE</version>  41         </dependency>  42         <!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->  43         <dependency>  44             <groupId>org.springframework</groupId>  45             <artifactId>spring-core</artifactId>  46             <version>4.1.6.RELEASE</version>  47         </dependency>  48         <!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->  49         <dependency>  50             <groupId>org.springframework</groupId>  51             <artifactId>spring-web</artifactId>  52             <version>4.1.6.RELEASE</version>  53         </dependency>  54         <!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->  55         <dependency>  56             <groupId>org.springframework</groupId>  57             <artifactId>spring-beans</artifactId>  58             <version>4.1.6.RELEASE</version>  59         </dependency>  60         <!-- https://mvnrepository.com/artifact/org.springframework/spring-aop -->  61         <dependency>  62             <groupId>org.springframework</groupId>  63             <artifactId>spring-aop</artifactId>  64             <version>4.1.6.RELEASE</version>  65         </dependency>  66         <!-- <dependency>  67             <groupId>org.apache.zookeeper</groupId>  68             <artifactId>zookeeper</artifactId>  69             <version>3.4.7</version>  70         </dependency>  71         <dependency>  72             <groupId>com.github.sgroschupf</groupId>  73             <artifactId>zkclient</artifactId>  74             <version>0.1</version>  75         </dependency> -->  76         <!-- https://mvnrepository.com/artifact/com.101tec/zkclient -->  77         <!-- 访问zookeeper客户端jar包 -->  78         <dependency>  79             <groupId>com.101tec</groupId>  80             <artifactId>zkclient</artifactId>  81             <version>0.10</version>  82         </dependency>  83  84     </dependencies>  85 </project>

消费者的配置文件applicationContext-dubbo.xml如下所示:

 1 <?xml version="1.0" encoding="UTF-8"?>   2 <beans xmlns="http://www.springframework.org/schema/beans"   3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   4     xmlns:context="http://www.springframework.org/schema/context"   5     xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"   6     xsi:schemaLocation="http://www.springframework.org/schema/beans   7     http://www.springframework.org/schema/beans/spring-beans.xsd   8         http://www.springframework.org/schema/context   9         http://www.springframework.org/schema/context/spring-context.xsd  10         http://code.alibabatech.com/schema/dubbo  11         http://code.alibabatech.com/schema/dubbo/dubbo.xsd">  12  13     <!-- 配置注解驱动 -->  14     <dubbo:annotation package="com.bie.consumer.service.impl" />  15  16     <!-- 1、首先给当前的provider起一个名称,方便监控中心进行监控 -->  17     <dubbo:application name="dubbo-consumer" />  18     <!-- 2、配置注册中心,protocol="dubbo"代表了是dubbo协议,地址是192.168.110.140:2181 -->  19     <dubbo:registry protocol="zookeeper"  20         address="192.168.110.140:2181"></dubbo:registry>  21  22     <!-- 3、将bean注入到容器中 -->  23     <bean id="dubboConsumerService" class="com.bie.consumer.service.impl.DubboConsumerServiceImpl"></bean>  24  25 </beans>        

这个相当于调用服务层的,所以这个项目相当于是service层的,所以业务代码如下所示:

测试代码和测试效果如下所示:

注意:记得启动你的zookeeper哦。

待续……