1. 程式人生 > >dubbo例項 Dubbo+Zookeeper+Spring整合應用篇-Dubbo基於Zookeeper實現分散式服務

dubbo例項 Dubbo+Zookeeper+Spring整合應用篇-Dubbo基於Zookeeper實現分散式服務

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 埠號在監聽服務。

部分需要的jar

spring jar整合jar

javassist-3.18.2-GA.jar

netty-3.2.5.Final.jar

zkclient-0.3.jar

zookeeper-3.3.6.jar

dubbo-2.5.4-SNAPSHOT.jar

此例項中 服務端,客戶端均使用java project專案

二:服務提供者(環境 win7 32 ,jdk 1.6.0_45 ,eclipse juno ,apache-tomcat-6.0.45)

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

[java] view plain copy  print?
  1. package com.unj.dubbotest.provider;  
  2. import java.util.List;  
  3. publicinterface DemoService {  
  4.     String sayHello(String name);  
  5.     public List getUsers();  
  6. }  

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

[java] view plain copy  print?
  1. package com.unj.dubbotest.provider.impl;  
  2. import java.util.ArrayList;  
  3. import java.util.List;  
  4. import com.unj.dubbotest.provider.DemoService;  
  5. publicclass DemoServiceImpl implements DemoService {  
  6.     public String sayHello(String name) {  
  7.         return"Hello " + name;  
  8.     }  
  9.     public List getUsers() {  
  10.         List list = new ArrayList();  
  11.         User u1 = new User();  
  12.         u1.setName("hejingyuan");  
  13.         u1.setAge(20);  
  14.         u1.setSex("f");  
  15.         User u2 = new User();  
  16.         u2.setName("xvshu");  
  17.         u2.setAge(21);  
  18.         u2.setSex("m");  
  19.         list.add(u1);  
  20.         list.add(u2);  
  21.         return list;  
  22.     }  
  23. }  

用Spring配置宣告暴露服務:

[html] view plain copy  print?
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <beansxmlns="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.     <!-- 具體的實現bean -->
  10.     <beanid="demoService"class="com.unj.dubbotest.provider.impl.DemoServiceImpl"/>
  11.     <!-- 提供方應用資訊,用於計算依賴關係 -->
  12.     <dubbo:applicationname="xs_provider"/>
  13.     <!-- 使用multicast廣播註冊中心暴露服務地址 -->
  14.     <!--<dubbo:registry address="multicast://224.5.6.7:1234" /> -->
  15.     <!-- 使用zookeeper註冊中心暴露服務地址 --即zookeeper的所在伺服器ip地址和埠號 -->
  16.     <dubbo:registryaddress="zookeeper://192.168.24.213:2181"/>
  17.     <!-- 用dubbo協議在20880埠暴露服務 -->
  18.     <dubbo:protocolname="dubbo"port="20880"/>
  19.     <!-- 宣告需要暴露的服務介面 -->
  20.     <dubbo:serviceinterface="com.unj.dubbotest.provider.DemoService"
  21.         ref="demoService"/>
  22. </beans>

載入Spring配置,啟動服務(或者將專案建為web專案,然後在web.xml中配置好spring的啟動,然後扔到tomcat中即可提供服務):

[java] view plain copy  print?
  1. package com.unj.dubbotest.provider.impl;  
  2. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  3. publicclass Provider {  
  4.     publicstaticvoid main(String[] args) throws Exception {  
  5.         ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(  
  6.                 new String[] { "applicationContext.xml" });  
  7.         context.start();  
  8.         System.in.read(); // 為保證服務一直開著,利用輸入流的阻塞來模擬
  9.     }  
  10. }  

三:服務消費者

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

[html] view plain copy  print?
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <beansxmlns="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.     <dubbo:applicationname="hjy_consumer"/>
  11.     <!-- 使用zookeeper註冊中心暴露服務地址 -->
  12.     <!-- <dubbo:registry address="multicast://224.5.6.7:1234" /> -->
  13.     <dubbo:registryaddress="zookeeper://192.168.24.213:2181"/>
  14.     <!-- 生成遠端服務代理,可以像使用本地bean一樣使用demoService -->
  15.     <dubbo:referenceid="demoService"
  16.         interface="com.unj.dubbotest.provider.DemoService"/>
  17. </beans>

呼叫服務測試

[java] view plain copy  print?
  1. package com.alibaba.dubbo.demo.pp;  
  2. import java.util.List;  
  3. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  4. import com.unj.dubbotest.provider.DemoService;  
  5. publicclass Consumer {  
  6.     publicstaticvoid main(String[] args) throws Exception {  
  7.         ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(  
  8. 相關推薦

    dubbo例項 Dubbo+Zookeeper+Spring整合應用-Dubbo基於Zookeeper實現分散式服務

    Dubbo與Zookeeper、Spring整合使用 Dubbo採用全spring配置方式,透明化接入應用,對應用沒有任何API侵入,只需用Spring載入Dubbo的配置即可,Dubbo基於Spring的Schema擴充套件進行載入。 一:單機模式安裝zook

    【JEECG Dubbo專題】Dubbo+Zookeeper+Spring整合應用-Dubbo基於Zookeeper實現分散式服務(二)...

    Dubbo與Zookeeper、Spring整合使用 Dubbo採用全Spring配置方式,透明化接入應用,對應用沒有任何API侵入,只需用Spring載入Dubbo的配置即可,Dubbo基於Spring的Schema擴充套件進行載入。 一:單機模式安裝zookeepe

    dubbo+zookeeper+spring整合(註解式demo)

    最近整理了一下dubbo+zookeeper+spring的主解式開發,做了一個小的demo, 環境: 1)     本地zookeeper 2)     本地dubbo 3)     Jkd1.8 4)     Eclipse 5)    Tomcat8 一:單機模式

    Spring Cloud 應用Spring Cloud Config(配置中心)

    為了方便儲存,轉自:https://blog.csdn.net/hubo_88/article/details/80692156 從前幾篇文章中我們就可以看出,在分散式系統中,服務數量會很多,如果要修改服務的配置檔案,會很麻煩,這個時候,我們想把配置檔案放在一個地方統一管理,實時更新,Sprin

    Spring Cloud 應用 之 Hystrix Dashboard(斷路器監控) 的基本搭建

    在以往的文章裡,已經講解了 斷路器 Hystrix 的基本使用,現在將介紹斷路器的監控 Hystrix Dashboard 的基本搭建。(一)簡介Hystrix Dashboard 是 Hystrix 的儀表盤元件,提供了資料監控,可以實時監控 Hystrix 的各個指標,然

    (未艾原創)JavaWeb——taotao商城01——4步用spring整合mybatis

    2017-01-12 03:11:42,217 [main] INFO  t.support.ClassPathXmlApplicationContext -Refreshing org[email protected]48aee668: startup date [Thu Jan 12 03:

    spring整合應用安全框架Shiro

    Shiro的介紹  Apache Shiro是一個強大易用的Java安全框架,它提供的主要功能有:      認證 -——使用者身份識別,常被稱為使用者“登入”;       授權—— 訪問控制; 密碼加密——保護或隱藏資料防止被偷窺; 會話管理——每使用者相關的時間敏感的

    Spring Cloud 應用Spring Cloud Sleuth + Zipkin(三)修改資料儲存方式

    (一)簡介預設情況下,Zipkin Server 會將跟蹤資訊儲存在記憶體中,每次重啟 Zipkin Server 都會使之前收集的跟蹤資訊丟失,並且當有大量跟蹤資訊時,記憶體儲存也會造成效能瓶頸,所以通常我們都需要將跟蹤資訊儲存到外部元件中,如 Mysql。由於 Sprin

    Spring Cloud 應用 之 Ribbon 的基本使用

    上一篇文章初步體驗了 Eureka 的基本使用,講了關於服務的註冊與發現。這一篇主要講解基於 Ribbon 實現的服務呼叫。(一)簡介Spring Cloud Ribbon 是一個基於 Http 和 TCP 的客服端負載均衡工具,它是基於 Netflix Ribbon 實現的

    Spring Cloud 應用 之 Hystrix Turbine(斷路器聚合監控)的基本搭建

    在講解了 Hystrix Dashboard 之後,我們知道了,Hystrix Dashboard 實現的是單節點模式,一次只能監控一個服務,當有很多服務的時候,這樣單節點模式去監控,就需要開啟多個瀏覽器視窗,顯然這是很麻煩的。這個時候,我們就可以用到 Spring Clou

    zookeeper,spring整合

    spring-content.xml配置檔案 <bean id="zookeeperClient" class="ZookeeperClient">       <constructor-arg index="0" value="10.139.8.40:

    Spring Security應用開發(19)基於方法的授權(三)AOP

    ntc blog view lob byname 控制器 頁面 poi bject 本文介紹使用AOP的配置方式來實現基於方法的授權。 (1)首先使用Spring Security提供的protect-pointcut進行配置。 protect-pointcut結點配置

    Spring Security應用開發(18)基於方法的授權(二)過濾

    屬性 and welcome pre length ++ per tsa 目標 本文將介紹@PreFilter和@PostFilter這兩個註解。 @PreFilter @PreFilter用於對方法的參數進行過濾。這種情況下參數通常是集合類型,符合條件的值被保留在集合

    Spring Security應用開發(16)基於表達式的訪問控制

    member font pan 地址 使用 基於 spa 數組 express 1.1.1. 通用表達式 Spring Security 使用基於Spring EL的表達式來進行訪問控制。內置的表達式如下表所示: 表達式 描述 hasRole(ro

    maven 專案(五) spring整合springMVC開發統一接入API--實現test介面

    為什麼要採用測試介面的方式:貼完程式碼我再來說; 1.貼張圖片 2.是測試介面地址的暴露方式: @Controller public class ApiTestController { @Value("${epeit.api.server}") private St

    SpringBoot + Dubbo + Mybatis 實現分散式服務

    SpringBoot + Dubbo + Mybatis 實現分散式服務 springboot   springboot  springboot    springboot  springboot&nb

    spring整合quartz定時任務(註解實現

    必備jar:quartz-1.6.5.jar、commons-collections-3.2.jar、commons-logging-1.1.jar //applicationContext.xml增加 xmlns:task="http://www.springframew

    IDEA搭建我的第一個Spring MVC應用(附使用註解實現

    oss finish b- ces ram 們的 配置 version 1.0 新建項目 File——New——Project Next 這裏任意填寫。 Finish 配置項目 配置前端控制器 DispatcherServlet <?xml version="1.

    持續整合高階基於win32-openssh搭建jenkins混合叢集(一)

    系列目錄 前面的demo我們使用的都是隻有一個windows主節點的的jenkins,實際生產環境中,一個節點往往是不能滿足需求的.比如,.net專案要使用windows節點構建,java專案如果部署在linux伺服器上往往也需要目標型別的linux節點做為構建節點,開發中使用的jdk版本不同也可能需要不

    spring之AOP操作(基於aspectJ實現)--配置檔案和註解兩種方式實現

    AOP概念   1 aop:面向切面(方面)程式設計,擴充套件功能不修改原始碼實現     2  AOP採取橫向抽取機制,取代了傳統縱向繼承體系重複性程式碼     3 aop底層使用動態代理實現     (1)第一種情況,有介面情況,使用動態代理建立介面實現類代理物