您好,登錄后才能下訂單哦!
本篇內容主要講解“Dubbo基礎知識總結以及zookeeper安裝方法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Dubbo基礎知識總結以及zookeeper安裝方法”吧!
面向服務的架構(SOA)是一個組件模型,它將應用程序的不同功能單元(稱為服務)通過這些服務之間定義良好的接口和契約聯系起來。接口是采用中立的方式進行定義的,它應該獨立于實現服務的硬件平臺、操作系統和編程語言。這使得構建在各種各樣的系統中的服務可以以一種統一和通用的方式進行交互。
面向服務架構,它可以根據需求通過網絡對松散耦合的粗粒度應用組件進行分布式部署、組合和使用。服務層是SOA的基礎,可以直接被應用調用,從而有效控制系統中與軟件代理交互的人為依賴性。
SOA是一種粗粒度、松耦合服務架構,服務之間通過簡單、精確定義接口進行通訊,不涉及底層編程接口和通訊模型。SOA可以看作是B/S模型、XML(標準通用標記語言的子集)/Web Services技術之后的自然延伸。
SOA將能夠幫助軟件工程師們站在一個新的高度理解企業級架構中的各種組件的開發、部署形式,它將幫助企業系統架構者以更迅速、更可靠、更具重用性架構整個業務系統。較之以往,以SOA架構的系統能夠更加從容地面對業務的急劇變化。
遠程過程調用協議,它是一種通過網絡從遠程計算機程序上請求服務,而不需要了解底層網絡技術的協議。RPC協議假定某些傳輸協議的存在,如TCP或UDP,為通信程序之間攜帶信息數據。在OSI網絡通信模型中,RPC跨越了傳輸層和應用層。RPC使得開發包括網絡分布式多程序在內的應用程序更加容易。
RPC采用客戶機/服務器模式。請求程序就是一個客戶機,而服務提供程序就是一個服務器。首先,客戶機調用進程發送一個有進程參數的調用信息到服務進程,然后等待應答信息。在服務器端,進程保持睡眠狀態直到調用信息到達為止。當一個調用信息到達,服務器獲得進程參數,計算結果,發送答復信息,然后等待下一個調用信息,最后,客戶端調用進程接收答復信息,獲得進程結果,然后調用執行繼續進行。
OSI是Open System Interconnection的縮寫,意為開放式系統互聯。國際標準化組織(ISO)制定了OSI模型,該模型定義了不同計算機互聯的標準,是設計和描述計算機網絡通信的基本框架。OSI模型把網絡通信的工作分為7層,分別是物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。
Dubbo是阿里巴巴開發的一個基于SOA結構基礎的,實現RPC遠程調用的框架.
Dubbo框架,是基于容器運行的. 容器是Spring.
在編寫服務和客戶端的時候, 需要注冊中心實現服務的發布和訂閱. 注冊中心中有服務端發布的服務全部信息,包括請求地址,參數命名,參數數量,參數限制,參數是否加密等. 客戶端通過注冊中心訂閱服務,獲取服務的所有信息,實現RPC遠程訪問.
官方網站 : http://dubbo.io/
阿里巴巴已經將dubbo框架捐獻給了Apache軟件基金會.
注冊中心. 用于Dubbo服務的發布和訂閱的核心組件.
Dubbo服務編寫成功后,發布到注冊中心. 客戶端通過注冊中心訂閱服務,并應用.
服務的提供者. 服務器. 運行真實的服務代碼的電腦[代碼].
如: 騰訊發布的三方登錄.
服務的消費者. 客戶端. 就是遠程調用Provider服務的代碼.
如: 三方網站, 網站中提供騰訊相關的登錄入口.
容器. 就是讓Provider和Consumer正常執行的容器.給Provider和Consumer一個可以正常運行的環境. 在Dubbo中使用Spring容器.
協議. Dubbo的Consumer和Provider通訊的標準.
Dubbo支持多種協議. 如: dubbo協議(Dubbo自定義的應用協議), RMI協議, TCP協議等.
監控中心, 管理中心, 調度中心. 管理Provider數量, Consumer數量, Consumer調用Provider次數的監控中心. 相當于統計.
Dubbo支持多種注冊中心. 不同的注冊中心提供不同的注冊服務方式.
Java開發的一個服務管理應用. 是Hadoop項目的子項目. 動物園管理員. 是一個其他應用的管理應用, 負責協調,調度,管理,配置等功能.
支持斷點恢復, 會話恢復, 配置服務項, 配置消費項, 通配信息配置等.
ZooKeeper是一個Java開發的應用. 運行環境只需要JDK和JVM.
廣播式注冊中心. 只要Provider和Consumer在同一個網段中即可實現服務的發布和訂閱.
局限性 : 只適合小型架構或開發測試使用. 因為可能造成廣播風暴. 網段內超過5臺物理機同時發布服務, 可能造成數據通訊問題, 無法實現快速的服務訂閱和應用.
KV服務器注冊中心. KV服務器, 高速緩存服務器. 內存型數據庫. NOSQL數據庫. 后期有課程詳細講解.
類似ZooKeeper注冊中心. Provider發布服務到Redis, Consumer從Redis中訂閱服務.
優勢: 高效.
缺陷: 數據描述相對簡單, 使用頻率相對較少. 沒有經過大量測試, 穩定性不確定.
就是Dubbo自定義的一個注冊中心. 減少三方依賴. 讓代碼依賴性降低, 耦合性降低.
只適合小型應用和開發測試.
官方網站 : http://zookeeper.apache.org/
下載資料的時候,不要下載beta版本.
tar -zxf zookeeper-3.4.6.tar.gz
解壓即可使用. 建議復制到/usr/local目錄下. 讓所有的系統用戶都可以使用.
cp -r zookeeper-3.4.6 /usr/local/zookeeper/
可執行文件. 如: 啟動,停止,重啟等命令.
配置信息. Zookeeper應用的配置文件
Zookeeper應用的jar包庫目錄. 是Zookeeper依賴的所有jar包保存位置
自定義目錄, 常用. 用于保存Zookeeper運行數據的目錄.
Zookeeper官方提供的幫助文檔
Zookeeper提供的插件和腳本相關資料.
源代碼
Zookeeper核心代碼庫. 后期開發可能應用的jar. 使用maven開發應用的時候,通過依賴下載jar包.
服務狀態發生變更時,Zookeeper自動輸出一個日志信息. 文件名為zookeeper.out.文本保存在執行服務狀態變更目錄下. 如: 在目錄/usr/local/zookeeper目錄中執行命令bin/zkServer.sh start. 日志文件在/usr/local/zookeeper目錄中輸出.
zkServer.sh - Zookeeper服務腳本. 用于啟動,停止,重啟使用.
命令 : bin/zkServer.sh start
啟動不成功. 有錯誤. 提示zoo.cfg配置文件不存在.配置文件保存在Zookeeper應用的conf目錄中.
Zookeeper提供了一個模板配置文件, 文件名為zoo_sample.cfg. 模板文件中已定義默認的所有配置信息. 可以通過復制使用.
cp zoo_sample.cfg zoo.cfg
在任意位置創建一個目錄.用于Zookeeper執行的數據存儲目錄. 建議在Zookeeper安裝目錄中創建.
建議命令 : 在Zookeeper安裝目錄中執行 mkdir data
# 檢查時間. 訪問的有效時長 tickTime=2000 # 初始化ticket個數. 默認支持多少客戶端并發訪問. initLimit=10 # 并發訪問線程個數 syncLimit=5 # Zookeeper執行過程數據的保存目錄,建議使用絕對路徑配置. dataDir=/usr/local/zookeeper/data # 客戶端端口 clientPort=2181
|
見到下述信息, 代表服務啟動成功. standalone代表單機版正在執行.
[root@node1 ~]# /usr/local/zookeeper/bin/zkServer.sh start
JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
bin/zkServer.sh stop
bin/zkServer.sh restart
bin/zkServer.sh status
命令: bin/zkCli.sh [-server 主機地址:端口]
默認連接本地2181端口的Zookeeper服務.
[應用名: 主機:端口(狀態) 執行的命令數量] [zk: localhost:2181(CONNECTED) 0] |
執行下述命令:
[zk: localhost:2181(CONNECTED) 0] quit
maven工程 - dubbo工程. pom工程.
導入jar包. 使用maven依賴導入.
<dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.7</version> </dependency> |
maven工程 - Provider, 是dubbo工程的module. pom工程.
Provider工程拆分成兩個子工程, 都是Provider工程的module.
service 工程, 是jar工程. 定義接口.
service-impl工程, 是jar工程. 定義接口的實現.
1.1.1 注解
使用Spring注解,管理要發布的接口實現對象.
也可以使用標簽bean管理.
1.1.2 spring配置文件
1.1.2.1 掃描服務注解
<context:component-scan />
1.1.2.2 配置Dubbo的Provider服務信息
<?xml version="1.0" encoding="UTF-8"?> <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">
<!-- 1. 掃描service注解 --> <context:component-scan base-package="com.bjsxt.service" />
<!-- 2. 配置Dubbo相關信息 --> <!-- 2.1 配置應用名, 是Dubbo應用的唯一命名. 是一個Provider定義一個唯一的命名. --> <dubbo:application name="test-provider" />
<!-- 2.2 配置注冊中心, 服務的提供者,要向注冊中心發布服務. 消費者要從注冊中心訂閱服務. --> <dubbo:registry address="192.168.120.143:2181" protocol="zookeeper" />
<!-- 2.3 協議信息, Provider和Consumer訪問注冊中心和相互之間的訪問,使用什么協議 --> <dubbo:protocol name="dubbo" port="20880" />
<!-- 2.4 要發布什么服務. 將當前spring容器中的什么bean對象信息,發布到注冊中心. --> <dubbo:service interface="com.bjsxt.service.TestService" ref="testServiceImpl"/>
</beans> |
1.1.3 代碼發布服務
通過代碼的執行, 將spring配置信息,實現發布.
將spring容器中的bean對象信息,發布到Zookeeper注冊中心中.
啟動spring容器即可. spring的容器可以啟動. 因為ClassPathXmlApplicationContext類型實現了接口Runnable. ClassPathXmlApplicationContext可以獨立啟動線程.
maven工程 - consumer, 是dubbo工程的module. jar工程
編寫測試代碼. 調用Provider中定義的服務代碼. 得到代碼返回的結果.
Consumer工程只能和provider-service工程有依賴關系. 通過dubbo的形式,遠程調用.
使用spring的注解管理Consumer代碼和代碼中的屬性依賴.
2.2.1 掃描注解
管理Consumer代碼和代碼中的屬性依賴關系.
<context:component-scan />
2.2.2 dubbo配置
描述Dubbo框架信息的.
<?xml version="1.0" encoding="UTF-8"?> <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">
<!-- 1. 掃描本地注解. 管理對象和屬性依賴關系. --> <context:component-scan base-package="com.bjsxt.service" />
<!-- 2. dubbo相關信息 --> <!-- 2.1 應用信息 --> <dubbo:application name="test-consumer"/>
<!-- 2.2 配置注冊中心 --> <dubbo:registry protocol="zookeeper" address="192.168.120.143:2181"/>
<!-- 2.3 協議, 可以省略. Dubbo相關服務信息是從注冊中心中訂閱的. Provider在發布服務的時候, 會定義協議信息. 所以Consumer一段配置協議信息無效. 如果配置了<dubbo:protocol>代表的含義是. 當前應用可能要發布服務. 發布服務的時候,使用的協議是什么. -->
<!-- 2.4 引用服務對象.從注冊中心中,訂閱對應的某一個服務. 服務的單位是接口. 訂閱得到的服務,被Dubbo技術封裝成一個代理對象. 內部實現由Dubbo決定. id - 就是spring管理的對象的唯一命名. 當前標簽相當于定義了一個bean標簽, spring容器管理一個對象. 這個對象,是一個Dubbo通過訂閱服務,創建的代理對象. 建議將id定義為需要使用的類型中的屬性名. spring的@Autowired注解,是先byType,再byName,實現屬性注入的. --> <dubbo:reference id="testService" interface="com.bjsxt.service.TestService"/>
</beans> |
為Dubbo應用命名的標簽. 是Dubbo框架對應用管理的唯一標記.
要求建議每個Dubbo應用命名不同.
<dubbo:application name=”應用名稱”/>
應用命名數據 : 字母,數字,’_’,’-’,’$’.
協議定義, 是為Provider方提供的標簽描述. 是Provider在發布服務的時候,綁定的協議信息.
默認協議是: dubbo協議
默認Dubbo協議端口: 20880.
<dubbo:protocol name=”協議名稱” port=”端口號” />
注冊中心. Dubbo在服務發布和訂閱過程的核心. 推薦使用的注冊中是Zookeeper.
需要定義訪問注冊中心的協議和注冊中心的地址.
<dubbo:registry protocol=”訪問注冊中心協議, Zookeeper注冊中心使用zookeeper協議” address=”注冊中心的地址, 數據結構是: ip:port; 多個注冊中心使用逗號分隔.” />
發布服務的標簽配置. Provider代碼要發布的服務信息. 要發布的服務是由哪一個bean對象提供服務的.要發布的服務接口是什么. 要求bean對象必須實現了接口.
同時可以配置,服務發布的配置. 如: 重試次數, 超時時間等.
<dubbo:service interface=”要發布的服務接口全命名” ref=”接口的實現類bean對象” />
3.4.1 其他屬性
3.4.1.1 timeout
超時時長. Consumer訪問Provider,要求必須在多長時間內得到響應結果.
在時間限定范圍外,會拋出異常.
默認值是:1000毫秒. Provider執行得到結果必須在1000毫秒內.
3.4.1.2 retries
Consumer訪問Provider如果發生了異常. 自動重試的次數.
默認值是: 2. 第一訪問是主動發起的. 如果有異常,自動重試2次.
Consumer方定義的服務引用配置. 從注冊中心訂閱服務后, 如何使用.
標簽會通知Dubbo框架, 根據訂閱的服務, 創建代理對象.
代理對象,同時也是spring容器管理的一個bean對象. 可以通過自動裝配注解@Autowired獲取.
<dubbo:reference interface=”要訂閱的服務接口全命名”
id=”唯一命名, 相當于bean標簽的id屬性” />
3.5.1 其他屬性
3.5.1.1 timeout
默認值是1000毫秒. 由dubbo:consumer標簽定義.
如果dubbo:service標簽定義了timeout,且dubbo:reference標簽未定義timeout屬性. 則使用service標簽定義的timeout.
3.5.1.2 retries
重試次數, 默認值為2. 由dubbo:consumer標簽定義.
如果dubbo:service標簽定義了retries,且dubbo:reference標簽未定義retries屬性. 則使用service標簽定義的retries.
是dubbo:service標簽的父配置標簽. 如果定義了dubbo:provider標簽, 則dubbo:sevice標簽默認使用其定義的屬性信息. 如: retries, timeout等.
如果定義:<dubbo:provider timeout=”3000” retries=”0” />
則所有未定義timeout和retries屬性的dubbo:service標簽,統一使用3000毫秒作為超時時長,0作為重試次數.
3.6.1 特殊屬性
3.6.1.1 payload
定義服務中方法的參數和返回值最大數據范圍的. 默認是8M數據.
Consumer訪問Provider的時候,傳遞的參數最大8M. Provider返回給Consumer返回結果的時候,最大8M.
默認值: 88388608, 單位是字節.
定義消費者默認配置的標簽. 就是給dubbo:reference標簽提供默認設置的.
如: <dubbo:consumer timeout=”3000” retries=”0” /> 而dubbo:reference標簽未配置屬性. 使用3000作為默認超時時間, 0作為重試次數.
Dubbo框架的通訊協議. Dubbo框架支持多種通訊協議. 默認使用Dubbo協議.
dubbo協議是Dubbo框架自定義的一種協議.
Dubbo缺省協議采用單一長連接和NIO異步通訊方式. 適合大數據量,高并發的服務調用. 以及服務消費機遠超過服務提供機的情況.
dubbo協議是一個NIO協議, 長連接小數據量傳輸協議, 不適合傳輸大數據. 如: 文件,媒體,圖片等. 除非訪問請求非常低的情況, 可以使用Dubbo協議傳輸大數據.
單一長連接 : Consumer和Provider通訊的時候,只有一個連接, 無論時間多久.
NIO : net io. 網絡IO流. 異步通訊. 可以Consumer一直發送請求數據, Provider處理一部分返回一部分結果.
Dubbo協議要求,Consumer和Provider在通訊的時候,所有傳遞的數據都必須可序列化.
Provider提供的服務方法參數表和返回值類型,必須可序列化.
參數和返回值類型不能自定義實現接口List,Set,Map,Number,Calendar等.
傳輸數據的時候,只傳輸類型屬性的值和屬性的類型. 不傳遞方法信息和靜態數據.
JDK提供的標準協議,是遠程方法調用協議. remote method invoke.
多連接, 短連接, tcp協議, 同步傳輸數據. 服務參數和返回值必須實現可序列化.
適合客戶端和服務器數量差不多的情況. 可以傳輸文件. 超時時長無效.
hessian協議, 基于http應用層協議. 通過servlet暴露服務.
多連接,短連接, http協議. 同步傳輸. 參數返回值數據量大. Provider數量大于Consumer數量. 服務的參數和返回值必須可序列化.
基于RPC的應用層協議.
是基于Memcached高效KV服務器實現的注冊中心. 類似Redis.
不需要Consumer感知注冊中心位置. 可以使用property屬性實現服務的應用.
到此,相信大家對“Dubbo基礎知識總結以及zookeeper安裝方法”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。