windows下搭建dubbo+zookeeper環境與使用


windows下搭建dubbo+zookeeper環境與使用

【轉摘】

之前在網上學到用linux搭建,便想着用windows試試。經過一番折騰終於弄了出來。故寫這篇文章也是做一個總結,理一理我遇到的一些問題。

因為我之前的工程是用maven搭建的,所以這是基於整合ssm框架的maven工程。

那么首先應該談一談為什么要使用dubbo:

 

隨着互聯網的發展,或許網站的規模會越來越大,常規的垂直應用架構已無法應對,那么這個時候僅僅靠一台服務器是不夠的。所以需要進行分布式架構。

那么這里,就有了問題,當服務器多了之后,它們之間是如何進行通訊,也就是調用和訪問呢?這就要用到webservice技術了。而當你的系統足夠大時,就會有許許多多的服務在通信,這時候就需要一個治理系統來保證有條不紊的演進。Dubbo是阿里開源的分布式服務框架,可以對服務統一治理,監控等等。

這是dubbo的架構圖

img

節點角色說明:

  • 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文件,做如下操作

img

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

img

這樣,便是啟動成功了,因為我的是在本機上部署的,所以ip地址是回環地址0,0,0,0。端口號則是之前默認設置的2181。注意 :這個窗口不要關閉!讓注冊中心服務一直運行。

生產者和消費者項目的運行

因為我的是maven工程,所以要添加依賴

  1.  
    <dependency>
  2.  
     
  3.  
    <groupId>com.alibaba</groupId>
  4.  
     
  5.  
    <artifactId>dubbo</artifactId>
  6.  
     
  7.  
    <version>2.5.3</version>
  8.  
     
  9.  
    </dependency>
  10.  
     
  11.  
    <dependency>
  12.  
     
  13.  
    <groupId>org.apache.zookeeper</groupId>
  14.  
     
  15.  
    <artifactId>zookeeper</artifactId>
  16.  
     
  17.  
    <version>3.4.6</version>
  18.  
     
  19.  
    </dependency>
  20.  
     
  21.  
    <dependency>
  22.  
     
  23.  
    <groupId>com.github.sgroschupf</groupId>
  24.  
     
  25.  
    <artifactId>zkclient</artifactId>
  26.  
     
  27.  
    <version>0.1</version>
  28.  
     
  29.  
    </dependency>

同時,在業務層做如下,這里給出我的例子,接口及實體類省略。

  1.  
    @Service
  2.  
     
  3.  
    public class ItemServiceImpl implements ItemService {
  4.  
     
  5.  
    @Autowired
  6.  
     
  7.  
    private TbItemMapper itemMapper;
  8.  
     
  9.  
    @Override
  10.  
     
  11.  
    public TbItem getItemById(long itemId) {
  12.  
     
  13.  
    TbItem item = itemMapper.selectByPrimaryKey(itemId);
  14.  
     
  15.  
    return item;
  16.  
     
  17.  
    }
  18.  
     
  19.  
    }

 

控制層

  1.  
    @Controller
  2.  
     
  3.  
    public class ItemController {
  4.  
     
  5.  
    @Autowired
  6.  
     
  7.  
    private ItemService itemService;
  8.  
     
  9.  
    @RequestMapping("/item/{itemId}")
  10.  
     
  11.  
    @ResponseBody
  12.  
     
  13.  
    public TbItem getItemById(@PathVariable Long itemId) {
  14.  
     
  15.  
    TbItem tbItem = itemService.getItemById(itemId);
  16.  
     
  17.  
    return tbItem;
  18.  
     
  19.  
    }
  20.  
     
  21.  

 

好了,寫完這些,我們還要在配置文件中添加dubbo的配置。

首先,在業務層中作為生產者,需要在spring配置文件中添加如下

  1.  
    <!-- 發布dubbo服務 -->
  2.  
    <!-- 提供方應用信息,用於計算依賴關系 -->
  3.  
    <dubbo:application name="eshop-manager" />
  4.  
    <!-- 注冊中心的地址 -->
  5.  
    <!--這里因為我的zookeeper注冊在本機,所以ip地址是這個,大家根據自己的不同修改-->
  6.  
    <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" />
  7.  
    <!-- 用dubbo協議在20880端口暴露服務 -->
  8.  
    <dubbo:protocol name="dubbo" port="20880" />
  9.  
    <!-- 聲明需要暴露的服務接口 -->
  10.  
    <dubbo:service interface="com.eshop.service.ItemService"
  11.  
    ref="itemServiceImpl" />

注意,scheme不要忘了引入

  1.  
    xmlns:dubbo= "http://code.alibabatech.com/schema/dubbo"
  2.  
    http: //code.alibabatech.com/schema/dubbo

另外,scheme文件要手動添加,在eclipse中點擊Windows-->preference,在搜索框輸入xml,點擊XML Catalog,找到add添加,如下圖

img

同時,作為消費者的控制層也要添加如下,scheme導入同上

  1.  
    <!-- 引用dubbo服務 -->
  2.  
    <dubbo:application name="eshop-manager-web" />
  3.  
    <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" />
  4.  
    <dubbo:reference interface="com.eshop.service.ItemService"
  5.  
    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

就可以看到如下圖片,有提供者和消費者注冊的服務了。我們也可以對它們進行管理操作。

img


另外,這里談一談我在實踐中遇到的問題,花費了不少的時間。

在運行的時候經常報錯,無非是如下這里個問題,我做一個歸納:

  1. 讀取配置文件問題,看一看web.xml有沒有讀入
  2. 注解導包是否正確,有沒有缺少什么
  3. 別忘了pojo類實現序列化接口
  4. 防火牆或許對你來說是個問題。

總結

到此基本上就已經結束了,只是明白了dubbo最基本的使用,即應用之間的rpc調用,服務提供者和使用者。Dubbo還提供了其他很多高級特性,如路由規則、參數回調、服務分組、服務降級等等,而且很多特性在給出內置實現的基礎上,還給出了擴展的接口,我們可以給出自定義的實現,非常方便而且強大。至於zookeeper,我這里也只是單機配置,還沒有嘗試集群配置。以后再慢慢深入研究。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM