1.Dubbo教程

轉自:https://blog.csdn.net/hellozpc/article/details/78575773

2. 什麼是dubbo

2.1. 簡介

DUBBO是一個分佈式服務框架,致力於提供高性能和透明化的RPC遠程服務調用方案,是阿里巴巴SOA服務化治理方案的核心框架,天天爲2,000+個服務提供3,000,000,000+次訪問量支持,並被普遍應用於阿里巴巴集團的各成員站點。java

 

Dubbo是Alibaba開源的分佈式服務框架,它最大的特色是按照分層的方式來架構,使用這種方式可使各個層之間解耦合(或者最大限度地鬆耦合)。從服務模型的角度來看,Dubbo採用的是一種很是簡單的模型,要麼是提供方提供服務,要麼是消費方消費服務,因此基於這一點能夠抽象出服務提供方(Provider)和服務消費方(Consumer)兩個角色。Dubbo框架使得使用者能夠像調用本地方法同樣調用遠程方法,而這一切只須要簡單的配置。Dubbo徹底兼容Spring配置方式注入,將來也會與Spring boot無縫整合。linux

 

開發團隊:git

 

2.2. RPC

 

2.3. 官網

http://dubbo.io/github

 

2.4. 版本說明

 

 

2017年9月份,沉寂了5年之久的Dubbo從新獲得維護!web

本教程基於2.5.7版本redis

2.5. 下載

Dubbo源碼託管於github,而且將jar包發佈到maven的中央倉庫,因此能夠從github和maven中央倉庫來下載。算法

2.5.1. 源碼下載

https://github.com/alibaba/dubbospring

 

2.5.2. 發佈包下載

http://repo1.maven.org/maven2/com/alibaba/dubbo/數據庫

 

3. 經過Maven編譯構建dubbo

既然能夠下載獲得源碼以及發佈包,那麼爲何要去構建dubbo呢?咱們先來看下dubbo的主要模塊:apache

 

其中,核心框架、管理控制檯、簡易監控中心、簡易註冊中心是咱們須要的模塊。目前只有核心模塊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. 導入依賴

 


編輯模塊systemBpom文件:

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. 查看效果

(重寫了UsertoString方法!)

zookeeperB系統運行起來,再運行A系統的測試用例:

 

能夠看到已經查詢到10條數據,那麼,也就是說A系統經過B系統提供的服務獲取到了數據。

5.5. 解決代碼重複問題

經過剛剛的示例咱們能夠發現,其中User對象和UserServiceA系統和B系統中都使用,那麼,咱們是否應該將該代碼複用,而不用硬拷貝?

答案是確定的。

在使用dubboprovider須要將提供服務所須要的java代碼(beaninterface等)單獨打包成jar提供給consumer使用。

5.5.1. 建立dubbo_systemB_api模塊


5.5.2. 將systemB中的pojoservice接口剪切到dubbo-systemB-api

注意:B系統和A系統的pojoservice接口所有刪除,所有直接依賴dubbo-systemB-api!

5.5.3. 在systemBpom.xml文件中添加dubbo-systemB-api的依賴,而且將pojoservice接口刪除

 

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. 在systemApom.xml文件中添加dubbo-systemB-api的依賴,而且將pojoservice接口刪除

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部署解壓到tomcatwebapps目錄下ROOT目錄(刪除裏面的內容)裏

 

6.2. 修改配置文件

 

6.3. 啓動tomcat

 

 

 

6.4. 查看管理界面

使用以下用戶登陸(密碼和用戶名一致,root/root)

 

登陸http://127.0.0.1:8080/

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] ------------------------------------------------------------------------

相關文章
相關標籤/搜索