1 介紹
随着網際網路的發展,網站應用的規模不斷擴大,正常的垂直應用架構已無法應對,分布式服務架構以及流動計算架構勢在必行,亟需一個治理系統確定架構有條不紊的演進。
DUBBO是一個分布式服務架構,緻力于提供高性能和透明化的RPC遠端服務調用方案,是阿裡巴巴SOA服務化治理方案的核心架構。
啟動時檢查、叢集容錯、負載均衡、線程模型、直連提供者、隻訂閱、隻注冊、靜态服務、多協定、多注冊中心、服務分組、多版本、分組聚合、參數驗證、結果緩存、泛化引用、泛化實作、回聲測試、上下文資訊、隐式傳參、異步調用、本地調用、參數回調、事件通知、本地存根、本地僞裝、延遲暴露、并發控制、連接配接控制、延遲連接配接、粘滞連接配接、令牌驗證、路由規則、配置規則、服務降級、優雅停機、主機綁定、日志适配、通路日志、服務容器、Reference Config緩存、分布式事務
dubbo
rmi
http
webservice
thrift
memcached
redis
2 環境準備
Java7、Java8
ZooKeeper
Maven
Tomcat7
Eclipse
3 架構圖
節點角色說明及對應demo子產品:
Provider: 暴露服務的服務提供方。對應dubbo-demo-provider。
Consumer: 調用遠端服務的服務消費方。對應dubbo-demo-consumer
Registry: 服務注冊與發現的注冊中心。這個demo使用ZooKeeper,關于ZooKeeper的搭建可參考這篇文章。
Monitor: 統計服務的調用次調和調用時間的監控中心。需要搭建dubbo-admin,對應的war包可從這裡下載下傳,也可自行編譯運作。
Container: 服務運作容器。使用Tomcat跟Jetty。
我的demo代碼:https://github.com/JasperZXY/dubbo-demo
4 開始搭建項目
下面的代碼是在Java8下運作通過的。
名稱為dubbo-demo,加入需要的jar,這裡把各個項目需要的jar包都放入了父pom中,實際項目最好做好分類,如下
這個子產品用于定義接口以及互動的實體對象,建立一個User跟UserService
這個子產品用于提供服務,是使用main方法直接運作的。
1、需要添加dubbo-demo-api這個依賴,pom.xml如下
2、UserService的實作
3、Spring配置
注:如果<dubbo:标簽有報錯的,可下載下傳一個dubbo.xsd檔案(可從我的git上找到),在Eclipse上windows->preferrence->XML->XML Catalog->add->catalog entry->file system,選擇剛剛下載下傳的檔案路徑,修改key值(dubbo.xsd),儲存。在xml檔案右鍵validate即可解決。
4、編寫啟動方法
這個子產品用于調用dubbo-demo-provider提供的服務,使用SpringMVC進行運作。
2、Spring的配置
appContext.xml,主配置檔案
springmvc-servlet.xml
dubbo-consumer.xml
3、web.xml
4、controller
調用遠端服務并傳回前端資料。
先啟動ZooKeeper
啟動dubbo-demo-provider
啟動dubbo-demo-consumer,mvn jetty:run -Djetty.port=8083
通路http://127.0.0.1:8083/user/list擷取資料
5 監控
自行編譯運作dubbo-admin或從我的git上下載下傳dubbo-admin-2.5.3.war,放入tomcat中運作。預設用的注冊中心是zookeeper://127.0.0.1:2181,可修改,在WEB-INF/dubbo.properties中進行修改。
啟動後通路http://127.0.0.1:8080/dubbo-admin-2.5.3,如果war包是改名為ROOT.war後運作的,則通路http://127.0.0.1:8080/,輸入賬号密碼(root/root)。
注意,由于現在很多機器都安裝了高版本的Java8,運作這個dubbo-admin将導緻出錯,報錯資訊為“Bean property 'URIType'
is not writable or has an invalid setter method”,詳見官方的issues。我自己的解決方法是下載下傳一個低版本的Java,修改tomcat對應的Java版本,找到setclasspath.bat中的set _RUNJAVA,set _RUNJDB這兩行,修改如下: