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

 

 

 

 

待續......


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM