首先熟知兩個(gè)概念1.SOA;2.RPC;
SOA
1.英文名稱(Service Oriented Ambiguity)
2.中文名稱:面向服務(wù)架構(gòu)
2.1有一個(gè)專門提供服務(wù)單元.
2.2其他所有單元都調(diào)用這個(gè)服務(wù).
3.SOA定位:
3.1 如何設(shè)計(jì)項(xiàng)目,讓開發(fā)時(shí)更有效率.
3.2 SOA是一種思想
4.之前項(xiàng)目架構(gòu)設(shè)計(jì)
4.1 在公司項(xiàng)目不允許所有項(xiàng)目都訪問(wèn)數(shù)據(jù)庫(kù).
4.2 開發(fā)時(shí),數(shù)據(jù)庫(kù)訪問(wèn)層代碼可能出現(xiàn)冗余
5.使用SOA架構(gòu)
5.1 專門訪問(wèn)數(shù)據(jù)庫(kù)服務(wù)(項(xiàng)目).
5.2 開發(fā)時(shí)可以實(shí)現(xiàn),數(shù)據(jù)訪問(wèn)控制和代碼復(fù)用.
6.實(shí)現(xiàn)SOA架構(gòu)時(shí),常用服務(wù).
6.1 Dubbo 做為服務(wù).
6.2 WebService 做為服務(wù).
6.3 Dubbox 做為服務(wù).
6.4 服務(wù)方就是web項(xiàng)目,調(diào)用web項(xiàng)目的控制器.
6.4.1 使用HttpClient可以調(diào)用其他項(xiàng)目的控制器.
RPC
1.英文名稱(Remote Procedure Call Protocol)
2.中文名稱:遠(yuǎn)程過(guò)程調(diào)用協(xié)議
3.RPC解析:客戶端(A)通過(guò)互聯(lián)網(wǎng)調(diào)用遠(yuǎn)程服務(wù)器,不知道遠(yuǎn)程服務(wù)器具體實(shí)現(xiàn),只知道遠(yuǎn)程服務(wù)器提供了什么功能.

4.RPC最大優(yōu)點(diǎn):
4.1 數(shù)據(jù)安全性.
dubbo簡(jiǎn)介
1.Dubbo簡(jiǎn)介:一個(gè)分布式、高性能、透明化的RPC服務(wù)框架;
2.作用:提供服務(wù)自動(dòng)注冊(cè)、自動(dòng)發(fā)現(xiàn)等高效服務(wù)治理方案.
3.Dubbo架構(gòu)圖

3.1 Provider :提供者,服務(wù)發(fā)布方.
3.2 Consumer:消費(fèi)者, 調(diào)用服務(wù)方
3.3 Container:Dubbo容器.依賴于Spring容器.
3.4 Registry: 注冊(cè)中心.當(dāng)Container啟動(dòng)時(shí)把所有可以提供的服務(wù)列表上Registry中進(jìn)行注冊(cè).
3.4.1 作用:告訴Consumer提供了什么服務(wù)和服務(wù)方在哪里.
3.5 Monitor:監(jiān)聽器
3.6 虛線都是異步訪問(wèn),實(shí)線都是同步訪問(wèn)
3.7 藍(lán)色虛線:在啟動(dòng)時(shí)完成的功能
3.8 紅色虛線(實(shí)線)都是程序運(yùn)行過(guò)程中執(zhí)行的功能
3.9 所有的角色都是可以在單獨(dú)的服務(wù)器上.所以必須遵守特定的協(xié)議.
4.運(yùn)行原理:
4.0 啟動(dòng)容器,相當(dāng)于在啟動(dòng)Dubbo的Provider
4.1 啟動(dòng)后會(huì)去注冊(cè)中心進(jìn)行注冊(cè).注冊(cè)所有可以提供的服務(wù)列表
4.2 在Consumer啟動(dòng)后會(huì)去Registry中獲取服務(wù)列表和Provider的地址.進(jìn)行訂閱.
4.3 當(dāng)Provider有修改后,注冊(cè)中心會(huì)把消息推送給Consummer
4.3.1 使用了觀察者設(shè)計(jì)模式(又叫發(fā)布/訂閱設(shè)計(jì)模式)
4.4 根據(jù)獲取到的Provider地址,真實(shí)調(diào)用Provider中功能.
4.4.1 在Consumer方使用了代理設(shè)計(jì)模式.創(chuàng)建一個(gè)Provider方類的一個(gè)代理對(duì)象.通過(guò)代理對(duì)象獲取Provider中真實(shí)功能,起到保護(hù)Provider真實(shí)功能的作用.
4.5 Consumer和Provider每隔1分鐘向Monitor發(fā)送統(tǒng)計(jì)信息,統(tǒng)計(jì)信息包含,訪問(wèn)次數(shù),頻率等.
四. Dubbo支持的注冊(cè)中心
- Zookeeper
1.1 優(yōu)點(diǎn):支持網(wǎng)絡(luò)集群
1.2 缺點(diǎn):穩(wěn)定性受限于Zookeeper - Redis
2.1 優(yōu)點(diǎn):性能高.
2.2 缺點(diǎn):對(duì)服務(wù)器環(huán)境要求較高. - Multicast
3.1 優(yōu)點(diǎn):面中心化,不需要額外安裝軟件.
3.2 缺點(diǎn):建議同機(jī)房(局域網(wǎng))內(nèi)使用
4.Simple
4.1 適用于測(cè)試環(huán)境.不支持集群.
五. Zookeeper講解
- Zookeeper 分布式協(xié)調(diào)組件.
1.1 本質(zhì)一個(gè)軟件.
2.Zookeeper常用功能
2.1 發(fā)布訂閱功能.把zookeeper當(dāng)作注冊(cè)中心原因.
2.2 分布式/集群管理功能.
3.使用java語(yǔ)言編寫的.
詳情請(qǐng)點(diǎn)擊zookeeper簡(jiǎn)介
六. Dubbo支持的協(xié)議
- Dubbo
1.1 Dubbo官方推薦的協(xié)議.
1.2 本質(zhì):使用NIO和線程池進(jìn)行處理.
1.3 缺點(diǎn):大文件傳輸時(shí)可能出現(xiàn)文件傳輸失敗問(wèn)題. - RMI
2.1 JDK提供的協(xié)議,遠(yuǎn)程方法調(diào)用協(xié)議.
2.2 缺點(diǎn):偶爾連接失敗.
2.3 優(yōu)點(diǎn):JDK原生,不需要進(jìn)行額外配置(導(dǎo)入jar) - Hession
3.1 優(yōu)點(diǎn):基于http協(xié)議,http請(qǐng)求支持.
3.2 缺點(diǎn):需要額外導(dǎo)入jar,并在短連接時(shí)性能低
七. Dubbo中Provider搭建
- 新建Maven Project, 里面只有接口(dubbo-service)
1.1 為什么這么做?
RPC框架,不希望Consumer知道具體實(shí)現(xiàn).如果實(shí)現(xiàn)類和接口在同一個(gè)項(xiàng)目中,Consumer依賴這個(gè)項(xiàng)目時(shí),就會(huì)知道實(shí)現(xiàn)類具體實(shí)現(xiàn). - 新建Maven Project, 寫接口的實(shí)現(xiàn)類(dubbo-service-impl)
- 在duboo-service-impl中配置pom.xml
3.1 依賴接口
3.2 依賴dubbo,去掉老版本spring
3.3 依賴新版本spring
3.4 依賴zookeeper客戶端工具zkClient
<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-webmvc</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<!-- 訪問(wèn)zookeeper的客戶端jar -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
</dependencies>
新建實(shí)現(xiàn)類,并實(shí)現(xiàn)接口方法.
新建配置文件applicationContext-dubbo.xml,并配置
5.1 <dubbo:application/> 給provider起名,在monitor或管理工具中區(qū)別是哪個(gè)provider
5.2 <dubbo:registry/> 配置注冊(cè)中心
5.2.1 address:注冊(cè)中心的ip和端口
5.2.2 protocol使用哪種注冊(cè)中心
5.3 <dubbo:protocol/> 配置協(xié)議
5.3.1 name 使用什么協(xié)議
5.3.2 port: consumer invoke provider時(shí)的端口號(hào)
5.4 <dubbo:service/> 注冊(cè)接口
5.4.1 ref 引用接口實(shí)現(xiàn)類<bean>的id值
<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">
<!-- 給當(dāng)前Provider自定義個(gè)名字 -->
<dubbo:application name="dubbo-service"/>
<!-- 配置注冊(cè)中心 -->
<dubbo:registry address="192.168.139.130:2181" protocol="zookeeper"></dubbo:registry>
<!-- 配置端口 -->
<dubbo:protocol name="dubbo" port="20888"></dubbo:protocol>
<!-- 注冊(cè)功能 -->
<dubbo:service interface="com.bjsxt.service.DemoService" ref="demoServiceImpl"></dubbo:service>
<bean id="demoServiceImpl" class="com.bjsxt.service.impl.DemoServiceImpl"></bean>
</beans>
- 啟動(dòng)容器
6.1 通過(guò)spring方式啟動(dòng)
6.1.1 applicationContext-dubbo.xml位置沒(méi)有要求
ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext-dubbo.xml");
ac.start();
System.out.println("啟動(dòng)成功");
System.in.read();
6.2 使用dubbo提供的方式啟動(dòng)(推薦使用這種方式)
6.2.1 要求applicationContext-dubbo.xml必須放入類路徑下/META-INF/spring/*.xml
Main.main(args);
八. Admin管理界面
- 本質(zhì)就是一個(gè)web項(xiàng)目
- 獲取注冊(cè)中心內(nèi)Provider注冊(cè)的信息.用頁(yè)面呈現(xiàn)出來(lái).
-
實(shí)現(xiàn)步驟
3.1 把dubbo-admin-2.5.3.war上傳到服務(wù)器tomcat中.
3.2 啟動(dòng)tomcat完成后關(guān)閉tomcat,刪除上傳的dubbo-admin-2.5.3.war
3.2.1 為什么要?jiǎng)h除:需要修改解壓后的文件夾,如果不刪除.war文件,下次重啟tomcat會(huì)還原成未修改狀態(tài)
3.3 進(jìn)入dubbo-admin-2.5.3/WEB-INF/dubbo.properties,修改第一行為zookeeper的ip和端口
3.3.2 第二行和第三行為管理界面的用戶名和密碼
image.png
3.4 啟動(dòng)tomcat, 在瀏覽器地址欄訪問(wèn)tomcat中dubbo項(xiàng)目
九.Consumer搭建過(guò)程
- 在pom.xml中除了ssm的依賴添加dubbo相關(guān)3個(gè)依賴(接口,dubbo.jar,zkClient)
- web.xml中修改<init-value>applicationContext-*.xml
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext-*.xml</param-value>
</context-param>
- spring配置文件命名為applicationContext-spring.xml,配置dubbo的配置文件applicationContext-dubbo.xml
<!-- 給當(dāng)前Consumer自定義個(gè)名字 -->
<dubbo:application name="dubbo-consumer"/>
<!-- 配置注冊(cè)中心 -->
<dubbo:registry address="192.168.139.130:2181" protocol="zookeeper"></dubbo:registry>
<!-- 配置注解掃描 -->
<dubbo:annotation package="com.bjsxt.service.impl"/>
- 不需要編寫mapper
- 除了ServiceImpl中引用Provider中接口對(duì)象改變,其他代碼都一樣.
@Service
public class TestServiceImpl implements TestService {
// @Resource
// private xxMapper xxxMapper;
@Reference
private DemoService demoService;
參考
比較spring cloud和dubbo,各自的優(yōu)缺點(diǎn)是什么
阿里P8架構(gòu)師談:Dubbo的詳細(xì)介紹、設(shè)計(jì)思路、以及4大適用場(chǎng)景
dubbo-簡(jiǎn)單介紹和demo樣例運(yùn)行
阿里P8架構(gòu)師談:Dubbo的詳細(xì)介紹、設(shè)計(jì)思路、以及4大適用場(chǎng)景
