由於工作中天天和Dubbo打交道,天天寫對外服務,所以有必要自己動手搭建一個Dubbo+zookeeper項目來更更深層次的認識Dubbo
首先了解一下SOA:
英文名稱(Service Oriented Ambiguity)中文的意思是面向服務的架構。好處是可以實現代碼的復用,以及對數據訪問的控制。實現SOA架構時,常用的有Dubbo,WebService,Dubbox,還有就是HttpClient.
1.Dubbo和Zookeeper的基本概念
Dubbo: 一個分布式、高性能、透明化的RPC服務框架,可以提供服務自動注冊、自動發現等高效服務治理方案.下面是它的架構圖:
1 Provider :提供者,服務發布方.
2 Consumer:消費者, 調用服務方
3 Container:Dubbo容器.依賴於Spring容器.
4 Registry: 注冊中心.當Container啟動時把所有可以提供的服務列表上Registry中進行注冊. 告訴Consumer提供了什么服務和服務方在哪里.
5 Monitor:監聽器
6 虛線都是異步訪問,實線都是同步訪問
7 藍色虛線:在啟動時完成的功能
8 紅色虛線(實線)都是程序運行過程中執行的功能
9 所有的角色都是可以在單獨的服務器上.所以必須遵守特定的協議.
1. 運行原理:
0 啟動容器,相當於在啟動Dubbo的Provider
1 啟動后會去注冊中心進行注冊.注冊所有可以提供的服務列表
()2 在Consumer啟動后會去Registry中獲取服務列表和Provider的地址.進行訂閱.
3 當Provider有修改后,注冊中心會把消息推送給Consummer
4.在Consumer方使用了代理設計模式.創建一個Provider方類的一個代理對象.通過代理對象獲取Provider中真實功能,起到保護Provider真實功能的作用
5.Consumer和Provider每隔1分鍾向Monitor發送統計信息,統計信息包含,訪問次數,頻率等.
Dubbo的注冊中心
1. Zookeeper(Zookeeper是一個高性能,開源的分布式協調服務的應用,它提供了許多功能,使分布式應用可以基於它實現更高級的服務。它的出現可以使我們更好的治理分布式服務。下載地址http://zookeeper.apache.org/)
1.1 優點:支持網絡集群
1.2 缺點:穩定性受限於Zookeeper
2. Redis(Redis是一個開源的使用ANSI C語言編寫、支持網絡、可基於內存亦可持久化的日志型、Key-Value數據庫,並提供多種語言的API。)
2.1 優點:性能高.
2.2 缺點:對服務器環境要求較高
這里使用zookeeper作為注冊中心。
好了,有了基本了解之后開始搭建項目!
首先創建一個maven項目,這個項目只提供接口
DubboService提供兩個方法
pom文件為:
接下來實現接口,我們在創建一個項目,這個項目就是服務的提供者:
pom文件為:
Srping-context的配置文件為:
服務的具體實現為:
最后我們創建服務的消費者
消費者的spring配置文件相當簡單
<dubbo:annotation package="com.yzy.consumer"/>是用來配置dubbo注解的掃描路徑
Consumer的實現
注意:這里的@reference是Dubbo的注解,因為我們配置Dubbo的掃描路徑所以可以使用這個注解自動裝配。
這樣。簡單的項目構架就搭建起來了,趕緊測試一下吧,老鐵!
首先啟動zookeeper 客戶端
運行zkServer.cmd
然后我們運行 服務的提供者Provider
可以看到已經向注冊中心中注冊可服務!
接下來運行消費端:
成功調用到接口並返回了數據!(數據庫的信息我就不粘了!)
結束!