windows下搭建dubbo+zookeeper環境與使用
【轉摘】
之前在網上學到用linux搭建,便想着用windows試試。經過一番折騰終於弄了出來。故寫這篇文章也是做一個總結,理一理我遇到的一些問題。
因為我之前的工程是用maven搭建的,所以這是基於整合ssm框架的maven工程。
那么首先應該談一談為什么要使用dubbo:
隨着互聯網的發展,或許網站的規模會越來越大,常規的垂直應用架構已無法應對,那么這個時候僅僅靠一台服務器是不夠的。所以需要進行分布式架構。
那么這里,就有了問題,當服務器多了之后,它們之間是如何進行通訊,也就是調用和訪問呢?這就要用到webservice技術了。而當你的系統足夠大時,就會有許許多多的服務在通信,這時候就需要一個治理系統來保證有條不紊的演進。Dubbo是阿里開源的分布式服務框架,可以對服務統一治理,監控等等。
這是dubbo的架構圖

節點角色說明:
- Provider: 暴露服務的服務提供方。
- Consumer: 調用遠程服務的服務消費方。
- Registry: 服務注冊與發現的注冊中心。
- Monitor: 統計服務的調用次調和調用時間的監控中心。
- Container: 服務運行容器。
正文
zookeeper的安裝配置
Zookeeper作為Dubbo服務的注冊中心,Zookeeper是hadoop的一個子項目,其發展歷程無需贅述。Dubbo原先基於數據庫的注冊中心,沒采用Zookeeper,Zookeeper一個分布式的服務框架,是樹型的目錄服務的數據存儲,能做到集群管理數據,這里能很好的作為Dubbo服務的注冊中心,Dubbo能與Zookeeper做到集群部署。官方也是推薦使用zookeeper。
首先下載zookeeper,我這里的版本是3.4.6。解壓后進入zookeeper的conf文件夾修改zoo-simple.cfg 為 zoo.cfg。
接着用編輯器打開zoo.cfg文件,做如下操作

接着就是啟動zookeeper,進入bin文件夾 啟動zkServer.cmd

這樣,便是啟動成功了,因為我的是在本機上部署的,所以ip地址是回環地址0,0,0,0。端口號則是之前默認設置的2181。注意 :這個窗口不要關閉!讓注冊中心服務一直運行。
生產者和消費者項目的運行
因為我的是maven工程,所以要添加依賴
-
<dependency>
-
-
<groupId>com.alibaba</groupId>
-
-
<artifactId>dubbo</artifactId>
-
-
<version>2.5.3</version>
-
-
</dependency>
-
-
<dependency>
-
-
<groupId>org.apache.zookeeper</groupId>
-
-
<artifactId>zookeeper</artifactId>
-
-
<version>3.4.6</version>
-
-
</dependency>
-
-
<dependency>
-
-
<groupId>com.github.sgroschupf</groupId>
-
-
<artifactId>zkclient</artifactId>
-
-
<version>0.1</version>
-
-
</dependency>
同時,在業務層做如下,這里給出我的例子,接口及實體類省略。
-
-
-
public class ItemServiceImpl implements ItemService {
-
-
-
-
private TbItemMapper itemMapper;
-
-
-
-
public TbItem getItemById(long itemId) {
-
-
TbItem item = itemMapper.selectByPrimaryKey(itemId);
-
-
return item;
-
-
}
-
-
}
控制層
-
-
-
public class ItemController {
-
-
-
-
private ItemService itemService;
-
-
-
-
-
-
public TbItem getItemById(
-
-
TbItem tbItem = itemService.getItemById(itemId);
-
-
return tbItem;
-
-
}
-
-
}
好了,寫完這些,我們還要在配置文件中添加dubbo的配置。
首先,在業務層中作為生產者,需要在spring配置文件中添加如下
-
<!-- 發布dubbo服務 -->
-
<!-- 提供方應用信息,用於計算依賴關系 -->
-
<dubbo:application name="eshop-manager" />
-
<!-- 注冊中心的地址 -->
-
<!--這里因為我的zookeeper注冊在本機,所以ip地址是這個,大家根據自己的不同修改-->
-
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" />
-
<!-- 用dubbo協議在20880端口暴露服務 -->
-
<dubbo:protocol name="dubbo" port="20880" />
-
<!-- 聲明需要暴露的服務接口 -->
-
<dubbo:service interface="com.eshop.service.ItemService"
-
ref="itemServiceImpl" />
注意,scheme不要忘了引入
-
xmlns:dubbo= "http://code.alibabatech.com/schema/dubbo"
-
http: //code.alibabatech.com/schema/dubbo
另外,scheme文件要手動添加,在eclipse中點擊Windows-->preference,在搜索框輸入xml,點擊XML Catalog,找到add添加,如下圖

同時,作為消費者的控制層也要添加如下,scheme導入同上
-
<!-- 引用dubbo服務 -->
-
<dubbo:application name="eshop-manager-web" />
-
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" />
-
<dubbo:reference interface="com.eshop.service.ItemService"
-
id="itemService" />
補充說明:
-
dubbo:registry 標簽一些屬性的說明:
- register是否向此注冊中心注冊服務,如果設為false,將只訂閱,不注冊。
- check注冊中心不存在時,是否報錯。
- subscribe是否向此注冊中心訂閱服務,如果設為false,將只注冊,不訂閱。
- timeout注冊中心請求超時時間(毫秒)。
- address可以Zookeeper集群配置,地址可以多個以逗號隔開等。
-
dubbo:service標簽的一些屬性說明:
- interface服務接口的路徑
- ref引用對應的實現類的Bean的ID
- registry向指定注冊中心注冊,在多個注冊中心時使用,值為的id屬性,多個注冊中心ID用逗號分隔,如果不想將該服務注冊到任何registry,可將值設為N/A
- register 默認true ,該協議的服務是否注冊到注冊中心。
dubbo admin UI工具的安裝
這個是dubbo的客戶端監控中心。
我的版本是dubbo-admin-2.5.4.war,大家可以在網上下載到,解壓后放到tomcat安裝處的webapps下
這里注意,如果監控中心與注冊中心在同一台服務器上,可以不需要任何配置。
如果不在同一台,則需要修改解壓文件后的WEB-INF下的dubbo.properties文件
這里的ip地址就需要修改了。
dubbo.registry.address=zookeeper://127.0.0.1:2181
配置好后,啟動tomcat,在瀏覽器中輸入http://localhost:8080/dubbo(這里的dubbo是我的dubbo admin的項目名字,可以更改。)登錄時需要用戶名root和密碼root。
就可以看到如下圖片,有提供者和消費者注冊的服務了。我們也可以對它們進行管理操作。

另外,這里談一談我在實踐中遇到的問題,花費了不少的時間。
在運行的時候經常報錯,無非是如下這里個問題,我做一個歸納:
- 讀取配置文件問題,看一看web.xml有沒有讀入
- 注解導包是否正確,有沒有缺少什么
- 別忘了pojo類實現序列化接口
- 防火牆或許對你來說是個問題。
總結
到此基本上就已經結束了,只是明白了dubbo最基本的使用,即應用之間的rpc調用,服務提供者和使用者。Dubbo還提供了其他很多高級特性,如路由規則、參數回調、服務分組、服務降級等等,而且很多特性在給出內置實現的基礎上,還給出了擴展的接口,我們可以給出自定義的實現,非常方便而且強大。至於zookeeper,我這里也只是單機配置,還沒有嘗試集群配置。以后再慢慢深入研究。
