分佈式雲+dubbo+zookeeper+Springmvc整合

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

 

一:單機模式安裝zookeeper

 

 

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

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

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

 

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

 

 

 

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

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

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

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

 

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

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

 

二:服務提供者

 

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

 

[java] view plain copy

 print?

  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. }  

 

 

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

[java] view plain copy

 print?

  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配置聲明暴露服務:

 

[html] view plain copy

 print?

  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中便可提供服務):

 

[java] view plain copy

 print?

  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配置引用遠程服務:

 

[html] view plain copy

 print?

  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>  

 

 

調用服務測試:

[java] view plain copy

 print?

  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/

核心技術:Maven,Springmvc mybatis shiro, Druid, Restful, Dubbo, ZooKeeper,Redis,FastDFS,ActiveMQ,Nginx 
1.     項目核心代碼結構截圖

分佈式框架介紹 - kafkaee - kafkaee的博客

   項目模塊依賴分佈式框架介紹 - kafkaee - kafkaee的博客

特別提醒:開發人員在開發的時候能夠將本身的業務REST服務化或者Dubbo服務化

2.    項目依賴介紹

   2.1 後臺管理系統、Rest服務系統、Scheculer定時調度系統依賴以下圖:
 

分佈式框架介紹 - kafkaee - kafkaee的博客

       2.2 Dubbo獨立服務項目依賴以下圖:

 分佈式框架介紹 - kafkaee - kafkaee的博客

3.  項目功能部分截圖:

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客
 

zookeeper、dubbo服務啓動 

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客
 

dubbo管控臺 

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客

 REST服務平臺

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客

相關文章
相關標籤/搜索