Dubbo與Zookeeper、Spring整合

Dubbo採用全Spring配置方式,透明化接入應用,對應用沒有任何API侵入,只需用Spring加載Dubbo的配置即可,Dubbo基於Spring的Schema擴展進行加載。

 

一:單機模式安裝zookeeper


 

1,下載zookeeper註冊中心,下載地址:http://www.apache.org/dyn/closer.cgi/zookeeper/ 下載後解壓即可,進入E:\zookeeper-3.3.6\zookeeper-3.3.6\bin,

雙擊zkServer.cmd啓動註冊中心服務。

zkServer.sh【Linux】或zkServer.cmd【Windows】

 

2,在你執行啓動腳本之前,還有幾個基本的配置項需要配置一下,Zookeeper的配置文件在 conf 目錄下,這個目錄下有 zoo_sample.cfg 和 log4j.properties,你需要做的就是將zoo_sample.cfg 改名爲 zoo.cfg,因爲 Zookeeper在啓動時會找這個文件作爲默認配置文件。下面詳細介紹一下,這個配置文件中各個配置項的意義。


 


   •tickTime:這個時間是作爲Zookeeper 服務器之間或客戶端與服務器之間維持心跳的時間間隔,也就是每個 tickTime 時間就會發送一個心跳。

   •dataDir:顧名思義就是 Zookeeper保存數據的目錄,默認情況下,Zookeeper 將寫數據的日誌文件也保存在這個目錄裏。

   •dataLogDir:顧名思義就是Zookeeper 保存日誌文件的目錄

   •clientPort:這個端口就是客戶端連接Zookeeper 服務器的端口,Zookeeper 會監聽這個端口,接受客戶端的訪問請求

 

配置好後,zookeeper會監聽本機的2181端口。

當這些配置項配置好後,你現在就可以啓動 Zookeeper 了,啓動後要檢查 Zookeeper 是否已經在服務,可以通過 netstat – ano 命令查看是否有你配置的 clientPort 端口號在監聽服務。

 

二:服務提供者

 

定義服務接口:(該接口需單獨打包,在服務提供方和消費方共享)

  1. package com.unj.dubbotest.provider;  
  2.   
  3. import java.util.List;  
  4.   
  5. public interface DemoService {  
  6.   
  7.     String sayHello(String name);  
  8.   
  9.     public List getUsers();  
  10.   
  11. }  

在服務提供方實現接口:(對服務消費方隱藏實現)

  1. package com.unj.dubbotest.provider.impl;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import com.unj.dubbotest.provider.DemoService;  
  7.   
  8. public class DemoServiceImpl implements DemoService {  
  9.   
  10.     public String sayHello(String name) {  
  11.         return "Hello " + name;  
  12.     }  
  13.   
  14.     public List getUsers() {  
  15.         List list = new ArrayList();  
  16.         User u1 = new User();  
  17.         u1.setName("hejingyuan");  
  18.         u1.setAge(20);  
  19.         u1.setSex("f");  
  20.   
  21.         User u2 = new User();  
  22.         u2.setName("xvshu");  
  23.         u2.setAge(21);  
  24.         u2.setSex("m");  
  25.   
  26.           
  27.         list.add(u1);  
  28.         list.add(u2);  
  29.           
  30.         return list;  
  31.     }  
  32. }  

用Spring配置聲明暴露服務:

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"  
  4.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
  5.         http://www.springframework.org/schema/beans/spring-beans.xsd  
  6.         http://code.alibabatech.com/schema/dubbo  
  7.         http://code.alibabatech.com/schema/dubbo/dubbo.xsd  
  8.         ">  
  9.   
  10.     <!-- 具體的實現bean -->  
  11.     <bean id="demoService" class="com.unj.dubbotest.provider.impl.DemoServiceImpl" />  
  12.   
  13.     <!-- 提供方應用信息,用於計算依賴關係 -->  
  14.     <dubbo:application name="xs_provider" />  
  15.   
  16.     <!-- 使用multicast廣播註冊中心暴露服務地址 -->  
  17.     <!--<dubbo:registry address="multicast://224.5.6.7:1234" /> -->  
  18.       
  19.     <!-- 使用zookeeper註冊中心暴露服務地址 --即zookeeper的所在服務器ip地址和端口號 -->  
  20.     <dubbo:registry address="zookeeper://192.168.24.213:2181" />  
  21.   
  22.     <!-- 用dubbo協議在20880端口暴露服務 -->  
  23.     <dubbo:protocol name="dubbo" port="20880" />  
  24.   
  25.     <!-- 聲明需要暴露的服務接口 -->  
  26.     <dubbo:service interface="com.unj.dubbotest.provider.DemoService"  
  27.         ref="demoService" />  
  28.   
  29. </beans>  



加載Spring配置,啓動服務(或者將項目建爲web項目,然後在web.xml中配置好spring的啓動,然後扔到tomcat中即可提供服務):


  1. package com.unj.dubbotest.provider.impl;  
  2.   
  3. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  4.   
  5. public class Provider {  
  6.   
  7.     public static void main(String[] args) throws Exception {  
  8.         ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(  
  9.                 new String[] { "applicationContext.xml" });  
  10.         context.start();  
  11.         System.in.read(); // 爲保證服務一直開着,利用輸入流的阻塞來模擬  
  12.     }  
  13. }  

三:服務消費者

 

通過Spring配置引用遠程服務:


  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"  
  4.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
  5.         http://www.springframework.org/schema/beans/spring-beans.xsd  
  6.         http://code.alibabatech.com/schema/dubbo  
  7.         http://code.alibabatech.com/schema/dubbo/dubbo.xsd  
  8.         ">  
  9.   
  10.     <!-- 消費方應用名,用於計算依賴關係,不是匹配條件,不要與提供方一樣 -->  
  11.     <dubbo:application name="hjy_consumer" />  
  12.   
  13.     <!-- 使用zookeeper註冊中心暴露服務地址 -->  
  14.     <!-- <dubbo:registry address="multicast://224.5.6.7:1234" /> -->  
  15.     <dubbo:registry address="zookeeper://192.168.24.213:2181" />  
  16.   
  17.     <!-- 生成遠程服務代理,可以像使用本地bean一樣使用demoService -->  
  18.     <dubbo:reference id="demoService"  
  19.         interface="com.unj.dubbotest.provider.DemoService" />  
  20.   
  21. </beans>  

調用服務測試:

  1. package com.alibaba.dubbo.demo.pp;  
  2.   
  3. import java.util.List;  
  4.   
  5. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  6.   
  7. import com.unj.dubbotest.provider.DemoService;  
  8.   
  9. public class Consumer {  
  10.   
  11.     public static void main(String[] args) throws Exception {  
  12.         ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(  
  13.                 new String[] { "applicationContext.xml" });  
  14.         context.start();  
  15.   
  16.         DemoService demoService = (DemoService) context.getBean("demoService");  
  17.         String hello = demoService.sayHello("hejingyuan");  
  18.         System.out.println(hello);  
  19.   
  20.         List list = demoService.getUsers();  
  21.         if (list != null && list.size() > 0) {  
  22.             for (int i = 0; i < list.size(); i++) {  
  23.                 System.out.println(list.get(i));  
  24.             }  
  25.         }  
  26.         System.in.read();  
  27.     }  
  28.   
  29. }  

測試結果:




附:Dubbo的管理頁面

 

需要下載:dubbo-admin-2.5.3的war

下載地址:http://download.csdn.net/detail/u013286716/7041185

 

操作如下:


1,替換掉tomcat/webapps下自帶的ROOT文件夾內容(即替換tomcat的啓動主頁),將下載的war包解壓到webapps/ROOT中,直接替換即可

 

   注意:jdk不要使用1.8,本次實驗使用的爲1.6

 

2,啓動tomcat,訪問ip:8080即可或者如果是本地的話使用localhost:8080

輸入用戶名密碼,在E:\apache-tomcat-7.0.6-dubbo\webapps\ROOT\WEB-INF下的dubbo.properties文件中即可查看到,如:



3,訪問 http://192.168.24.213:38080/




4,啓動我們的服務提供者和消費者即可查看到



 

整體說明

    

    Zookeeper(註冊中心)部署到213的機子上,服務提供者和服務消費者均在215的機子上運行,當然我們也可以分別將服務提供者和服務消費者部署到不同的兩臺機子上。


優點:

    服務提供者和服務消費者只需要知道註冊中心即可,它們之間打交道需通過註冊中心這個第三方,只要是註冊中心中已經註冊的服務,我們均可以使用,實現了服務提供者和服務消費者間的解耦。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章