一、前述
Dubbo是一種提供高效能,透明化的RPC框架.是阿里開源的一個框架。
官網地址:http://dubbo.io/
二、架構
元件解釋:
Provider: 提供者.釋出服務的專案.
Registry: 註冊中心.所有提供者必須去註冊中心註冊自己所有能釋出的服務.
Consumer: 消費者.呼叫服務的專案.
Monitor: 監控中心.監控消費者和提供者呼叫服務的時間及次數.預設每1分鐘向監控中心生成一次統計資料.之間呼叫必須遵守Dubbo支援的協議.
Container:容器.Dubbo依賴於Spring容器.
執行順序:
0:由Spring容器啟動服務.
1 向註冊中心註冊服務.
2 消費者向註冊中心訂閱需要呼叫的服務.在註冊中心的服務列表中尋找需要呼叫的服務.獲取到提供者真實地址.
3 註冊中心通知消費提供者的真實地址.如果提供者的服務發生變化,註冊中心會自動推送資訊給消費者.
4 消費者呼叫提供者的服務.
5 在呼叫過程中向監控中心傳送資料,進行統計呼叫時間和呼叫次數.
6 虛線都是非同步請求,實線都是同步請求.
三、Dubbo支援的註冊中心
1.Zookeeper註冊中心
1.1 優點:支援叢集.
1.2 缺點:穩定性受Zookeeper影響.
2.Redis註冊中心
1.1 優點:基於伺服器雙寫模式.效能高.
1.2 缺點:要求伺服器時間必須一致.
3.Multicast註冊中心
3.1 免中心化的註冊中心,不需要額外安裝軟體.
3.2 不支援叢集.
4.Simple註冊中心
4.1 適用於測試環境的.
四、Dubbo支援的幾種協議
1. Dubbo
1.1 基於NIO的協議.效能比較高
1.2 缺點:在單一連線時,傳輸大檔案可能出錯.
2.RMI
2.1 RMI是JDK提供的.可以和原生RMI互用.
2.2 缺點:可能出現連線無效情況.
3.Hession
3.1 第三方的Hession.jar
3.2 缺點:短連線效能低.
五、Zookeeper簡介
1.分散式協調元件(就是一個軟體.)
2.好處:
2.1 高效性
2.2 可擴充套件性.
3.作用:
3.1 服務釋出和訂閱(註冊使用這個特性)
3.2 叢集管理功能(SolrCloud使用這個特性)
3.3 負載均衡
3.4 分散式鎖
4.使用java語言編寫.
六.使用Maven釋出服務的步驟
1.建立dubbo-service專案,只寫介面
2.建立dubbo-service-impl專案,需要依賴dubbo-service
3.在pom.xml配置,匯入dubbo.jar和zkClient.jar
3.1 <exclusions>不匯入哪個依賴包
3.2 spring-context:我們使用的spring版本
3.3 zkClient:連線Zookeeper的客戶端工具包
3.4 dubbo: dubbo框架的包
<dependencies> <dependency> <groupId>com.bjsxt</groupId> <artifactId>dubbo-service</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.3</version> <exclusions> <exclusion> <artifactId>spring</artifactId> <groupId>org.springframework</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.1.6.RELEASE</version> </dependency> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.10</version> </dependency> </dependencies>
4. 在resources下新建spring配置檔案
<beans>可以在dubbo-master.zip\dubbo-master\ dubbo-admin\ src\main\resources\META-INF\spring裡面複製
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!-- 在監控中心/admin管理介面中看是哪個專案 --> <dubbo:application name="dubbo-service-impl"/> <!-- 配置註冊中心 --> <dubbo:registry protocol="zookeeper" address="192.168.92.130:2181"></dubbo:registry> <!-- 配置協議 --> <dubbo:protocol name="dubbo" port="20880"></dubbo:protocol> <!-- 註解掃描 --> <dubbo:annotation package="com.bjsxt.service.impl"/> </beans>
5.編寫服務實現類
5.1 @Service是Dubbo的註解
import com.alibaba.dubbo.config.annotation.Service; import com.bjsxt.service.DemoService; @Service public class DemoServiceImpl implements DemoService { @Override public String test(String name) { return "傳遞過來的內容:"+name; } }
七.使用Maven建立Consummer專案
1.保證Consummer專案中服務方介面
1.1 需要知道服務方介面名稱及方法名
2.建立Maven projec,配置pom.xml
2.1 依賴的dubbo-service可以從svn上下載.
<dependencies> <dependency> <groupId>com.bjsxt</groupId> <artifactId>dubbo-service</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.3</version> <exclusions> <exclusion> <artifactId>spring</artifactId> <groupId>org.springframework</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.1.6.RELEASE</version> </dependency> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.10</version> </dependency> </dependencies>
3.編寫spirng配置檔案
3.1 application需要自定義名稱
3.2 掃描自己專案中ServiceImpl的@Reference註解
<!-- 在監控中心/admin管理介面中看是哪個專案 --> <dubbo:application name="dubbo-consummer"/> <!-- 配置註冊中心 --> <dubbo:registry protocol="zookeeper" address="192.168.92.130:2181"></dubbo:registry> <!-- 配置協議 --> <dubbo:protocol name="dubbo" port="20880"></dubbo:protocol> <!-- 註解掃描,掃描@Reference註解 --> <dubbo:annotation package="com.bjsxt.service.impl"/>
4.編寫Service實現類程式碼
4.1 @Service 把類交給Spring容器
4.2 @Reference給介面注入物件.物件資訊從註冊中心獲取.
import org.springframework.stereotype.Service; import com.alibaba.dubbo.config.annotation.Reference; import com.bjsxt.service.DemoService; import com.bjsxt.service.MyService; @Service public class MyServiceImpl implements MyService { @Reference private DemoService demoService; @Override public void test() { String result = demoService.test("張三"); System.out.println(result); } }
5、編寫測試程式碼:
public class Test { @SuppressWarnings("resource") public static void main(String[] args) { ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext-consummer.xml"); MyServiceImpl bean = ac.getBean("myServiceImpl", MyServiceImpl.class); bean.test(); } }
八.Admin管理介面
1.本質:web專案,war打包專案
2.直接把dubbo-admin-2.5.3放入到tomcat(linux/window都可以)中
3.啟動tomcat.
4.關閉tomcat.
5.刪除dubbo-admin-2.5.3.war
5.1 防止下次啟動tomcat後重新解壓,導致修改內容無效
6.進入解壓後資料夾dubbo-admin-2.5.3/WEB-INF/中修改dubbo.properties檔案
6.1 第一行為註冊中心地址
6.2 第二行是管理員使用者名稱和密碼
6.3 第三行是遊客的使用者名稱個和密碼