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

待續……