轉自:https://blog.csdn.net/hellozpc/article/details/78575773
2. 什么是dubbo
2.1. 簡介
DUBBO是一個分布式服務框架,致力於提供高性能和透明化的RPC遠程服務調用方案,是阿里巴巴SOA服務化治理方案的核心框架,每天為2,000+個服務提供3,000,000,000+次訪問量支持,並被廣泛應用於阿里巴巴集團的各成員站點。
Dubbo是Alibaba開源的分布式服務框架,它最大的特點是按照分層的方式來架構,使用這種方式可以使各個層之間解耦合(或者最大限度地松耦合)。從服務模型的角度來看,Dubbo采用的是一種非常簡單的模型,要么是提供方提供服務,要么是消費方消費服務,所以基於這一點可以抽象出服務提供方(Provider)和服務消費方(Consumer)兩個角色。Dubbo框架使得使用者可以像調用本地方法一樣調用遠程方法,而這一切只需要簡單的配置。Dubbo完全兼容Spring配置方式注入,未來也會與Spring boot無縫整合。
開發團隊:
2.2. RPC
2.3. 官網
2.4. 版本說明
2017年9月份,沉寂了5年之久的Dubbo重新得到維護!
本教程基於2.5.7版本
2.5. 下載
Dubbo源碼托管於github,並且將jar包發布到maven的中央倉庫,所以可以從github和maven中央倉庫來下載。
2.5.1. 源碼下載
https://github.com/alibaba/dubbo
2.5.2. 發布包下載
http://repo1.maven.org/maven2/com/alibaba/dubbo/
3. 通過Maven編譯構建dubbo
既然可以下載得到源碼以及發布包,那么為什么要去構建dubbo呢?我們先來看下dubbo的主要模塊:
其中,核心框架、管理控制台、簡易監控中心、簡易注冊中心是我們需要的模塊。目前只有核心模塊jar包可以下載到,其它的均無法直接下載,所以我們需要構建dubbo。
3.1. 導入源碼到IDEA
從githhub上下載dubbo源碼得到dubbo-master.zip:
https://github.com/alibaba/dubbo
解壓壓縮包:
導入源碼到IDEA:
右側Maven Projects有紅色報錯信息,報maven插件無法加載,這個不要緊,待會編譯打包Reimport一下即可!
如果POM文件有些划紅線的地方也可不管,編譯報錯再詳細分析。切勿編輯pom文件,可能造成一些換行等,編譯pom文件會報無法解析(人品好的話編譯不會報錯,一次成功!)
3.2. 構建dubbo
在構建之前,各個源碼包下面還沒有target目錄,構建成功之后,打好的jar包、war包會放到默認的輸出目錄下的target目錄下。
配置運行參數:
點擊運行按鈕開始構建。
第一次構建耗時比較長,要聯網下載許多jar包(建議使用阿里雲的maven倉庫)
maven_settings.xml中配置:
1 <mirrors> 2 <mirror> 3 <id>nexus-aliyun</id> 4 <mirrorOf>*</mirrorOf> 5 <name>Nexus aliyun</name> 6 <url>http://maven.aliyun.com/nexus/content/groups/public</url> 7 </mirror> 8 </mirrors>
構建完成:
1 [INFO] Reactor Summary: 2 [INFO] 3 [INFO] dubbo-parent ....................................... SUCCESS [ 0.171 s] 4 [INFO] Hessian Lite(Alibaba embed version) ................ SUCCESS [ 6.314 s] 5 [INFO] dubbo-common ....................................... SUCCESS [ 6.943 s] 6 [INFO] dubbo-container .................................... SUCCESS [ 0.005 s] 7 [INFO] dubbo-container-api ................................ SUCCESS [ 1.129 s] 8 [INFO] dubbo-container-spring ............................. SUCCESS [ 1.416 s] 9 [INFO] dubbo-container-jetty .............................. SUCCESS [ 1.341 s] 10 [INFO] dubbo-container-log4j .............................. SUCCESS [ 1.343 s] 11 [INFO] dubbo-container-logback ............................ SUCCESS [ 1.416 s] 12 [INFO] dubbo-remoting ..................................... SUCCESS [ 0.004 s] 13 [INFO] dubbo-remoting-api ................................. SUCCESS [ 4.595 s] 14 [INFO] dubbo-remoting-netty ............................... SUCCESS [ 2.015 s] 15 [INFO] dubbo-remoting-mina ................................ SUCCESS [ 1.652 s] 16 [INFO] dubbo-remoting-grizzly ............................. SUCCESS [ 0.925 s] 17 [INFO] dubbo-remoting-p2p ................................. SUCCESS [ 1.690 s] 18 [INFO] dubbo-remoting-http ................................ SUCCESS [ 0.965 s] 19 [INFO] dubbo-remoting-zookeeper ........................... SUCCESS [ 1.657 s] 20 [INFO] dubbo-remoting-netty4 .............................. SUCCESS [ 2.108 s] 21 [INFO] dubbo-rpc .......................................... SUCCESS [ 0.004 s] 22 [INFO] dubbo-rpc-api ...................................... SUCCESS [ 2.920 s] 23 [INFO] dubbo-rpc-default .................................. SUCCESS [ 2.990 s] 24 [INFO] dubbo-rpc-injvm .................................... SUCCESS [ 1.493 s] 25 [INFO] dubbo-rpc-rmi ...................................... SUCCESS [ 1.602 s] 26 [INFO] dubbo-rpc-hessian .................................. SUCCESS [ 1.681 s] 27 [INFO] dubbo-rpc-http ..................................... SUCCESS [ 0.784 s] 28 [INFO] dubbo-rpc-webservice ............................... SUCCESS [ 1.870 s] 29 [INFO] dubbo-cluster ...................................... SUCCESS [ 3.492 s] 30 [INFO] dubbo-registry ..................................... SUCCESS [ 0.005 s] 31 [INFO] dubbo-registry-api ................................. SUCCESS [ 2.279 s] 32 [INFO] dubbo-monitor ...................................... SUCCESS [ 0.004 s] 33 [INFO] dubbo-monitor-api .................................. SUCCESS [ 1.530 s] 34 [INFO] dubbo-filter ....................................... SUCCESS [ 0.004 s] 35 [INFO] dubbo-filter-validation ............................ SUCCESS [ 0.899 s] 36 [INFO] dubbo-filter-cache ................................. SUCCESS [ 0.822 s] 37 [INFO] dubbo-registry-default ............................. SUCCESS [ 1.977 s] 38 [INFO] dubbo-monitor-default .............................. SUCCESS [ 1.567 s] 39 [INFO] dubbo-registry-multicast ........................... SUCCESS [ 1.674 s] 40 [INFO] dubbo-config ....................................... SUCCESS [ 0.004 s] 41 [INFO] dubbo-config-api ................................... SUCCESS [ 3.004 s] 42 [INFO] dubbo-config-spring ................................ SUCCESS [ 3.852 s] 43 [INFO] dubbo-rpc-thrift ................................... SUCCESS [ 3.846 s] 44 [INFO] dubbo-rpc-memcached ................................ SUCCESS [ 0.790 s] 45 [INFO] dubbo-rpc-redis .................................... SUCCESS [ 0.828 s] 46 [INFO] dubbo-registry-zookeeper ........................... SUCCESS [ 1.580 s] 47 [INFO] dubbo-registry-redis ............................... SUCCESS [ 1.641 s] 48 [INFO] dubbo .............................................. SUCCESS [ 39.232 s] 49 [INFO] dubbo-simple ....................................... SUCCESS [ 0.005 s] 50 [INFO] dubbo-registry-simple .............................. SUCCESS [ 4.940 s] 51 [INFO] dubbo-monitor-simple ............................... SUCCESS [ 9.127 s] 52 [INFO] dubbo-admin ........................................ SUCCESS [ 11.274 s] 53 [INFO] dubbo-demo ......................................... SUCCESS [ 0.004 s] 54 [INFO] dubbo-demo-api ..................................... SUCCESS [ 0.660 s] 55 [INFO] dubbo-demo-provider ................................ SUCCESS [ 3.590 s] 56 [INFO] dubbo-demo-consumer ................................ SUCCESS [ 3.541 s] 57 [INFO] dubbo-test ......................................... SUCCESS [ 0.004 s] 58 [INFO] dubbo-test-benchmark ............................... SUCCESS [ 4.688 s] 59 [INFO] dubbo-test-compatibility ........................... SUCCESS [ 0.041 s] 60 [INFO] dubbo-test-integration ............................. SUCCESS [ 0.044 s] 61 [INFO] dubbo-test-examples ................................ SUCCESS [ 3.082 s] 62 [INFO] ------------------------------------------------------------------------ 63 [INFO] BUILD SUCCESS 64 [INFO] ------------------------------------------------------------------------ 65 [INFO] Total time: 02:39 min 66 [INFO] Finished at: 2017-11-19T14:33:11+08:00 67 [INFO] Final Memory: 41M/163M 68 [INFO] ------------------------------------------------------------------------
3.3. 找到對應的模塊包
3.3.1. 核心框架
3.3.2. 管理控制台
3.3.3. 簡易監控中心
3.3.4. 簡易注冊中心
4. Dubbo框架說明
4.1. 背景
4.2. 需求

4.3. 架構
調用關系:
1. 服務容器負責啟動,加載,運行服務提供者。
2. 服務提供者在啟動時,向注冊中心注冊自己提供的服務。
3. 服務消費者在啟動時,向注冊中心訂閱自己所需的服務。
4. 注冊中心返回服務提供者地址列表給消費者,如果有變更,注冊中心將基於長連接推送變更數據給消費者。
5. 服務消費者,從提供者地址列表中,基於軟負載均衡算法,選一台提供者進行調用,如果調用失敗,再選另一台調用。
6. 服務消費者和提供者,在內存中累計調用次數和調用時間,定時每分鍾發送一次統計數據到監控中心。
5. 快速入門
5.1. 實現功能
存在2個獨立的系統,A系統和B系統。A系統調用B系統暴露的接口獲取數據,比如查詢用戶列表。
5.2. 安裝zookeeper
解壓得到如下:
修改配置文件conf/zoo.cfg:設置data目錄,該目錄必須存在。
雙擊zkServer啟動zookeeper服務(cmd文件是windows腳本,sh文件是linux下的腳本):
5.3. 搭建B系統(B模塊)
5.3.1. 創建工程
新建一個maven項目
新建模塊
上一步也可以不選骨架,這樣生成的目錄沒有webapp目錄,需要手動創建!並且手動改pom文件的packing類型為war
<packaging>war</packaging>
一路next,直到finish。
5.3.2. 導入依賴
編輯模塊systemB的pom文件:
Dubbo核心jar可以先install到本地maven倉庫。其實如果聯網,一旦保存pom文件,maven工具會自動遠程倉庫下載
1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 3 <parent> 4 <artifactId>dubbodemo</artifactId> 5 <groupId>cn.com.zpc</groupId> 6 <version>1.0-SNAPSHOT</version> 7 </parent> 8 <modelVersion>4.0.0</modelVersion> 9 <artifactId>systemB</artifactId> 10 <packaging>war</packaging> 11 <name>systemB Maven Webapp</name> 12 <url>http://maven.apache.org</url> 13 <dependencies> 14 <dependency> 15 <groupId>junit</groupId> 16 <artifactId>junit</artifactId> 17 <version>3.8.1</version> 18 <scope>test</scope> 19 </dependency> 20 <!-- 采用spring配置方式使用dubbo,所以需要導入spring容器依賴--> 21 <dependency> 22 <groupId>org.springframework</groupId> 23 <artifactId>spring-webmvc</artifactId> 24 <version>4.3.10.RELEASE</version> 25 </dependency> 26 <dependency> 27 <groupId>org.slf4j</groupId> 28 <artifactId>slf4j-log4j12</artifactId> 29 <version>1.6.4</version> 30 </dependency> 31 <dependency> 32 <groupId>com.alibaba</groupId> 33 <artifactId>dubbo</artifactId> 34 <version>2.5.7</version> 35 <!-- 排除傳遞spring依賴--> 36 <exclusions> 37 <exclusion> 38 <artifactId>spring</artifactId> 39 <groupId>org.springframework</groupId> 40 </exclusion> 41 <exclusion> 42 <artifactId>spring-web</artifactId> 43 <groupId>org.springframework</groupId> 44 </exclusion> 45 <exclusion> 46 <artifactId>spring-beans</artifactId> 47 <groupId>org.springframework</groupId> 48 </exclusion> 49 <exclusion> 50 <artifactId>spring-context</artifactId> 51 <groupId>org.springframework</groupId> 52 </exclusion> 53 </exclusions> 54 </dependency> 55 </dependencies> 56 <build> 57 <finalName>systemB</finalName> 58 <plugins> 59 <plugin> 60 <groupId>org.apache.tomcat.maven</groupId> 61 <artifactId>tomcat7-maven-plugin</artifactId> 62 <version>2.2</version> 63 <configuration> 64 <port>8081</port> 65 <path>/</path> 66 </configuration> 67 </plugin> 68 </plugins> 69 </build> 70 </project>
5.3.3. 配置log4j文件
在resources下新建log4j.properties:
1 log4j.rootLogger=DEBUG,A1 2 log4j.appender.A1=org.apache.log4j.ConsoleAppender 3 log4j.appender.A1.layout=org.apache.log4j.PatternLayout 4 log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n
5.3.4. 創建User對象
1 package com.zpc.dubbo.systemb.pojo; 2 public class Userimplements java.io.Serializable{ 3 private static final longserialVersionUID = -2668999087589887337L; 4 privateLong id; 5 privateString username; 6 privateString password; 7 privateInteger age; 8 publicLong getId() { 9 returnid; 10 } 11 public voidsetId(Longid) { 12 this.id= id; 13 } 14 publicString getUsername() { 15 returnusername; 16 } 17 public voidsetUsername(Stringusername) { 18 this.username= username; 19 } 20 publicString getPassword() { 21 returnpassword; 22 } 23 public voidsetPassword(Stringpassword) { 24 this.password= password; 25 } 26 publicInteger getAge() { 27 returnage; 28 } 29 public voidsetAge(Integerage) { 30 this.age= age; 31 } 32 }
5.3.5. 創建UserService(接口)並提供查詢服務
1 package com.zpc.dubbo.systemb.service; 2 import com.zpc.dubbo.systemb.pojo.User; 3 import java.util.List; 4 public interface UserService{ 5 /** 6 * 查詢所有的用戶數據 7 */ 8 publicList<User>queryAll(); 9 }
5.3.6. 創建UserServiceImpl實現類
1 package com.zpc.dubbo.systemb.service.impl; 2 import com.zpc.dubbo.systemb.pojo.User; 3 import com.zpc.dubbo.systemb.service.UserService; 4 import java.util.ArrayList; 5 import java.util.List; 6 public class UserServiceImplimplements UserService{ 7 /** 8 * 實現查詢,這里做模擬實現,不做具體的數據庫查詢 9 */ 10 @Override 11 publicList<User>queryAll() { 12 List<User>list =new ArrayList<User>(); 13 for(inti =0;i <10;i++) { 14 Useruser =new User(); 15 user.setAge(20+ i); 16 user.setId(Long.valueOf(i+ 1)); 17 user.setPassword("123456"); 18 user.setUsername("username_"+ i); 19 list.add(user); 20 } 21 returnlist; 22 } 23 }
5.3.7. 編寫dubbo配置文件
dubbo-provider.xml
具體配置:
1 <beansxmlns="http://www.springframework.org/schema/beans" 2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" 3 xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.0.xsd 4 http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> 5 <!-- 提供方應用信息,用於計算依賴關系 --> 6 <dubbo:applicationname="dubbo-b-provider"/> 7 <!-- 這里使用的注冊中心是zookeeper --> 8 <dubbo:registryaddress="zookeeper://127.0.0.1:2181"client="zkclient"/> 9 <!-- 用dubbo協議在20880端口暴露服務 --> 10 <dubbo:protocolname="dubbo"port="20880"/> 11 <!-- 將該接口暴露到dubbo中 --> 12 <dubbo:serviceinterface="com.zpc.dubbo.systemb.service.UserService"ref="userServiceImpl"/> 13 <!-- 將具體的實現類加入到Spring容器中 --> 14 <beanid="userServiceImpl"class="com.zpc.dubbo.systemb.service.impl.UserServiceImpl"/> 15 </beans>
5.3.8. 導入zookeeper依賴
1 <dependency> 2 <groupId>org.apache.zookeeper</groupId> 3 <artifactId>zookeeper</artifactId> 4 <version>3.4.8</version> 5 </dependency> 6 <dependency> 7 <groupId>com.github.sgroschupf</groupId> 8 <artifactId>zkclient</artifactId> 9 <version>0.1</version> 10 </dependency>
5.3.9. 編寫Web.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> 3 <display-name>dubbo-b</display-name> 4 <context-param> 5 <param-name>contextConfigLocation</param-name> 6 <param-value>classpath:dubbo/dubbo-*.xml</param-value> 7 </context-param> 8 <!--Spring的ApplicationContext載入 --> 9 <listener> 10 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 11 </listener> 12 <welcome-file-list> 13 <welcome-file>index.jsp</welcome-file> 14 </welcome-file-list> 15 </web-app>
5.3.10. 啟動tomcat
使用maven插件啟動服務器:
查看tomcat啟動日志:
1 2017-11-19 16:49:45,033 [DubboZkclientConnector-SendThread(127.0.0.1:2181)] [org.apache.zookeeper.ClientCnxn]-[INFO]Opening socket connection to server 127.0.0.1/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error) 2 2017-11-19 16:49:45,034 [DubboZkclientConnector-SendThread(127.0.0.1:2181)] [org.apache.zookeeper.ClientCnxn]-[INFO]Socket connection established to 127.0.0.1/127.0.0.1:2181, initiating session 3 2017-11-19 16:49:45,035 [DubboZkclientConnector-SendThread(127.0.0.1:2181)] [org.apache.zookeeper.ClientCnxn]-[DEBUG] Session establishment request sent on 127.0.0.1/127.0.0.1:2181 4 2017-11-19 16:49:45,190 [DubboZkclientConnector-SendThread(127.0.0.1:2181)] [org.apache.zookeeper.ClientCnxn]-[INFO] Session establishment complete on server 127.0.0.1/127.0.0.1:2181, sessionid = 0x15fd342ea0c0000, negotiated timeout = 30000 5 2017-11-19 16:49:45,191 [DubboZkclientConnector-EventThread] [org.I0Itec.zkclient.ZkClient]-[DEBUG] Received event: WatchedEvent state:SyncConnected type:None path:null 6 2017-11-19 16:49:45,192 [DubboZkclientConnector-EventThread] [org.I0Itec.zkclient.ZkClient]-[INFO] zookeeper state changed (SyncConnected) 7 2017-11-19 16:49:45,192 [DubboZkclientConnector-EventThread] [org.I0Itec.zkclient.ZkClient]-[DEBUG] Leaving process event 8 2017-11-19 16:49:45,192 [DubboZkclientConnector] [org.I0Itec.zkclient.ZkClient]-[DEBUG] State is SyncConnected 9 2017-11-19 16:49:45,194 [localhost-startStop-1] [com.alibaba.dubbo.registry.zookeeper.ZookeeperRegistry]-[INFO] [DUBBO]Register: dubbo://192.168.181.1:20880/com.zpc.dubbo.systemb.service.UserService?anyhost=true&application=dubbo-b-provider&dubbo=2.5.7&generic=false&interface=com.zpc.dubbo.systemb.service.UserService&methods=queryAll&pid=5564&side=provider×tamp=1511081384696, dubbo version: 2.5.7, current host: 127.0.0.1 10 2017-11-19 16:49:45,209 [DubboZkclientConnector-SendThread(127.0.0.1:2181)] [org.apache.zookeeper.ClientCnxn]-[DEBUG] Reading reply sessionid:0x15fd342ea0c0000, packet:: clientPath:null serverPath:null finished:false header:: 1,3 replyHeader:: 1,569,-101 request:: '/dubbo/com.zpc.dubbo.systemb.service.UserService/providers,F response::
可以看到,已經將UserService服務注冊到zookeeper注冊中心,協議采用的是dubbo。
Zookeeper控制台顯示收到連接:
5.4. 搭建A系統(A模塊)
5.4.1. 創建工程
步驟可以參照搭建B系統!A系統創建完成:
5.4.2. 導入依賴
A系統的pom文件:參考B系統,一模一樣!
5.4.3. 配置log4j文件
1 log4j.properties(和B系統一樣配置即可): 2 log4j.rootLogger=DEBUG,A1 3 log4j.appender.A1=org.apache.log4j.ConsoleAppender 4 log4j.appender.A1.layout=org.apache.log4j.PatternLayout 5 log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n
5.4.4. 從B系統中拷貝User對象、UserService接口到A系統
注意是從B系統完全拷貝到A系統,包名不能改動!
5.4.5. 編寫A系統的dubbo配置文件
dubbo-consumer.xml:
1 <beansxmlns="http://www.springframework.org/schema/beans" 2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" 3 xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.0.xsd 4 http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> 5 <!-- 提供方應用信息,用於計算依賴關系 --> 6 <dubbo:applicationname="dubbo-a-consumer"/> 7 <!-- 這里使用的注冊中心是zookeeper --> 8 <dubbo:registryaddress="zookeeper://127.0.0.1:2181"client="zkclient"/> 9 <!-- 從注冊中心中查找服務 --> 10 <dubbo:referenceid="userService"interface="com.zpc.dubbo.systemb.service.UserService"/> 11 </beans>
5.4.6. 編寫UserService測試用例
1 package com.zpc.dubbotest; 2 import com.zpc.dubbo.systemb.pojo.User; 3 import com.zpc.dubbo.systemb.service.UserService; 4 import org.junit.Before; 5 import org.junit.Test; 6 import org.springframework.context.ApplicationContext; 7 import org.springframework.context.support.ClassPathXmlApplicationContext; 8 import java.util.List; 9 public class TestUserService{ 10 privateUserService userService; 11 @Before 12 public voidsetUp()throws Exception{ 13 ApplicationContextapplicationContext =new ClassPathXmlApplicationContext( 14 "classpath:dubbo/*.xml"); 15 this.userService= applicationContext.getBean(UserService.class); 16 } 17 @Test 18 public voidtestQueryAll() { 19 List<User>users =this.userService.queryAll(); 20 for(Useruser :users) { 21 System.out.println(user); 22 } 23 } 24 }
5.4.7. 查看效果
(重寫了User的toString方法!)
把zookeeper、B系統運行起來,再運行A系統的測試用例:
可以看到,已經查詢到10條數據,那么,也就是說A系統通過B系統提供的服務獲取到了數據。
5.5. 解決代碼重復問題
通過剛剛的示例我們可以發現,其中User對象和UserService在A系統和B系統中都使用,那么,我們是否應該將該代碼復用,而不用硬拷貝?
答案是肯定的。
在使用dubbo時,provider需要將提供服務所需要的java代碼(bean、interface等)單獨打包成jar提供給consumer使用。
5.5.1. 創建dubbo_systemB_api模塊

5.5.2. 將systemB中的pojo和service接口剪切到dubbo-systemB-api中
注意:B系統和A系統的pojo與service接口全部刪除,全部直接依賴dubbo-systemB-api!
5.5.3. 在systemB的pom.xml文件中添加dubbo-systemB-api的依賴,並且將pojo與service接口刪除
1 <dependency> 2 <groupId>cn.com.zpc</groupId> 3 <artifactId>dubbo_systemB_api</artifactId> 4 <version>1.0-SNAPSHOT</version> 5 </dependency>
修改dubbo-provider.xml
1 <!-- 將該接口暴露到dubbo中 --> 2 <dubbo:serviceinterface="com.zpc.systemb.api.service.UserService"ref="userServiceImpl"/>
5.5.4. 在systemA的pom.xml文件中添加dubbo-systemB-api的依賴,並且將pojo與service接口刪除
1 <dependency> 2 <groupId>cn.com.zpc</groupId> 3 <artifactId>dubbo_systemB_api</artifactId> 4 <version>1.0-SNAPSHOT</version> 5 </dependency>
修改dubbo-consumer.xml
1 <!-- 從注冊中心中查找服務 --> 2 <dubbo:referenceid="userService"interface="com.zpc.systemb.api.service.UserService"/>
此時目錄結構如下(只有api包中保留接口和pojo類定義):
5.5.5. 測試
測試之前先rebuild項目!
依次啟動zookeeper和系統B,再運行系統A中的測試用例!
測試,發現,和之前實現一樣。
其實也可以把接口保留B系統中(畢竟B系統提供的服務嘛)。然后在A系統中直接依賴B系統的jar包即可。
6. 管理界面
dubbo提供了一套在線管理整個服務的功能,管理控制台為阿里內部裁剪版本,開源部分主要包含:路由規則,動態配置,服務降級,訪問控制,權重調整,負載均衡,等管理功能。
6.1. 安裝
將dubbo-admin-2.5.7.war部署解壓到tomcat的webapps目錄下的ROOT目錄(刪除里面的內容)里:
6.2. 修改配置文件
6.3. 啟動tomcat
6.4. 查看管理界面
使用如下用戶登錄(密碼和用戶名一致,如root/root):
Tomcat端口未必是8080,看自己怎么配的。
效果:
功能:
提供者:
消費者:
應用:
<!-- 從注冊中心中查找服務 -->
<dubbo:referenceid="userService"interface="com.zpc.systemb.api.service.UserService"/>
[INFO] Reactor Summary:
[INFO]
[INFO] dubbo-parent ....................................... SUCCESS [ 0.171 s]
[INFO] Hessian Lite(Alibaba embed version) ................ SUCCESS [ 6.314 s]
[INFO] dubbo-common ....................................... SUCCESS [ 6.943 s]
[INFO] dubbo-container .................................... SUCCESS [ 0.005 s]
[INFO] dubbo-container-api ................................ SUCCESS [ 1.129 s]
[INFO] dubbo-container-spring ............................. SUCCESS [ 1.416 s]
[INFO] dubbo-container-jetty .............................. SUCCESS [ 1.341 s]
[INFO] dubbo-container-log4j .............................. SUCCESS [ 1.343 s]
[INFO] dubbo-container-logback ............................ SUCCESS [ 1.416 s]
[INFO] dubbo-remoting ..................................... SUCCESS [ 0.004 s]
[INFO] dubbo-remoting-api ................................. SUCCESS [ 4.595 s]
[INFO] dubbo-remoting-netty ............................... SUCCESS [ 2.015 s]
[INFO] dubbo-remoting-mina ................................ SUCCESS [ 1.652 s]
[INFO] dubbo-remoting-grizzly ............................. SUCCESS [ 0.925 s]
[INFO] dubbo-remoting-p2p ................................. SUCCESS [ 1.690 s]
[INFO] dubbo-remoting-http ................................ SUCCESS [ 0.965 s]
[INFO] dubbo-remoting-zookeeper ........................... SUCCESS [ 1.657 s]
[INFO] dubbo-remoting-netty4 .............................. SUCCESS [ 2.108 s]
[INFO] dubbo-rpc .......................................... SUCCESS [ 0.004 s]
[INFO] dubbo-rpc-api ...................................... SUCCESS [ 2.920 s]
[INFO] dubbo-rpc-default .................................. SUCCESS [ 2.990 s]
[INFO] dubbo-rpc-injvm .................................... SUCCESS [ 1.493 s]
[INFO] dubbo-rpc-rmi ...................................... SUCCESS [ 1.602 s]
[INFO] dubbo-rpc-hessian .................................. SUCCESS [ 1.681 s]
[INFO] dubbo-rpc-http ..................................... SUCCESS [ 0.784 s]
[INFO] dubbo-rpc-webservice ............................... SUCCESS [ 1.870 s]
[INFO] dubbo-cluster ...................................... SUCCESS [ 3.492 s]
[INFO] dubbo-registry ..................................... SUCCESS [ 0.005 s]
[INFO] dubbo-registry-api ................................. SUCCESS [ 2.279 s]
[INFO] dubbo-monitor ...................................... SUCCESS [ 0.004 s]
[INFO] dubbo-monitor-api .................................. SUCCESS [ 1.530 s]
[INFO] dubbo-filter ....................................... SUCCESS [ 0.004 s]
[INFO] dubbo-filter-validation ............................ SUCCESS [ 0.899 s]
[INFO] dubbo-filter-cache ................................. SUCCESS [ 0.822 s]
[INFO] dubbo-registry-default ............................. SUCCESS [ 1.977 s]
[INFO] dubbo-monitor-default .............................. SUCCESS [ 1.567 s]
[INFO] dubbo-registry-multicast ........................... SUCCESS [ 1.674 s]
[INFO] dubbo-config ....................................... SUCCESS [ 0.004 s]
[INFO] dubbo-config-api ................................... SUCCESS [ 3.004 s]
[INFO] dubbo-config-spring ................................ SUCCESS [ 3.852 s]
[INFO] dubbo-rpc-thrift ................................... SUCCESS [ 3.846 s]
[INFO] dubbo-rpc-memcached ................................ SUCCESS [ 0.790 s]
[INFO] dubbo-rpc-redis .................................... SUCCESS [ 0.828 s]
[INFO] dubbo-registry-zookeeper ........................... SUCCESS [ 1.580 s]
[INFO] dubbo-registry-redis ............................... SUCCESS [ 1.641 s]
[INFO] dubbo .............................................. SUCCESS [ 39.232 s]
[INFO] dubbo-simple ....................................... SUCCESS [ 0.005 s]
[INFO] dubbo-registry-simple .............................. SUCCESS [ 4.940 s]
[INFO] dubbo-monitor-simple ............................... SUCCESS [ 9.127 s]
[INFO] dubbo-admin ........................................ SUCCESS [ 11.274 s]
[INFO] dubbo-demo ......................................... SUCCESS [ 0.004 s]
[INFO] dubbo-demo-api ..................................... SUCCESS [ 0.660 s]
[INFO] dubbo-demo-provider ................................ SUCCESS [ 3.590 s]
[INFO] dubbo-demo-consumer ................................ SUCCESS [ 3.541 s]
[INFO] dubbo-test ......................................... SUCCESS [ 0.004 s]
[INFO] dubbo-test-benchmark ............................... SUCCESS [ 4.688 s]
[INFO] dubbo-test-compatibility ........................... SUCCESS [ 0.041 s]
[INFO] dubbo-test-integration ............................. SUCCESS [ 0.044 s]
[INFO] dubbo-test-examples ................................ SUCCESS [ 3.082 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 02:39 min
[INFO] Finished at: 2017-11-19T14:33:11+08:00
[INFO] Final Memory: 41M/163M
[INFO] ------------------------------------------------------------------------