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

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哦。

待续......

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券