1. 程式人生 > >dubbo和zookeeper的整合使用

dubbo和zookeeper的整合使用

(1)Dubbo介紹:

1.dubbo是一個分散式服務框架,架構圖如下:


節點角色說明:

Provider: 暴露服務的服務提供方。
Consumer: 呼叫遠端服務的服務消費方。
Registry: 服務註冊與發現的註冊中心。
Monitor: 統計服務的呼叫次調和呼叫時間的監控中心。
Container: 服務執行容器。
呼叫關係說明:

0. 服務容器負責啟動,載入,執行服務提供者。
1. 服務提供者在啟動時,向註冊中心註冊自己提供的服務。
2. 服務消費者在啟動時,向註冊中心訂閱自己所需的服務。
3. 註冊中心返回服務提供者地址列表給消費者,如果有變更,註冊中心將基於長連線推送變更資料給消費者。


4. 服務消費者,從提供者地址列表中,基於軟負載均衡演算法,選一臺提供者進行呼叫,如果呼叫失敗,再選另一臺呼叫。
5. 服務消費者和提供者,在記憶體中累計呼叫次數和呼叫時間,定時每分鐘傳送一次統計資料到監控中心。

配置dubbo管理頁面

1,替換掉tomcat/webapps下自帶的ROOT資料夾內容(即替換tomcat的啟動主頁),將下載的war包解壓到webapps/ROOT中
2,然後到webapps/ROOT/WEB-INF下,有一個dubbo.properties檔案,裡面指向Zookeeper ,使用的是Zookeeper 的註冊中心
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.admin.root.password=root dubbo.admin.guest.password=guest
3,zookeeper啟動後,然後再啟動tomcat服務,使用者名稱和密碼:root,並訪問服務,顯示登陸頁面,說明dubbo-admin部署成功

(2)zookeeper介紹

         zookeeper用來註冊服務和進行負載均衡,哪一個服務由哪一個機器來提供必需讓呼叫者知道,簡單來說就是ip地址和服務名稱的對應關係。當然也可以通過硬編碼的方式把這種對應關係在呼叫方業務程式碼中實現,但是如果提供服務的機器掛掉呼叫者無法知曉,如果不更改程式碼會繼續請求掛掉的機器提供服務。zookeeper通過心跳機制可以檢測掛掉的機器並將掛掉機器的ip和服務對應關係從列表中刪除。至於支援高併發,簡單來說就是橫向擴充套件,在不更改程式碼的情況通過新增機器來提高運算能力。通過新增新的機器向zookeeper註冊服務,服務的提供者多了能服務的客戶就多了。


        Zookeeper作為Dubbo服務的註冊中心,Dubbo原先基於資料庫的註冊中心,沒采用ZookeeperZookeeper一個分散式的服務框架,是樹型的目錄服務的資料儲存,能做到叢集管理資料 ,這裡能很好的作為Dubbo服務的註冊中心,Dubbo能與Zookeeper做到叢集部署,當提供者出現斷電等異常停機時,Zookeeper註冊中心能自動刪除提供者資訊,當提供者重啟時,能自動恢復註冊資料,以及訂閱請求。我們先在linux上安裝Zookeeper,我們安裝最簡單的單點,叢集比較麻煩。

    (2) 我們放到Linux下的一個資料夾,然後解壓:

      #tar zxvf zookeeper-3.4.6.tar.gz

  (3)然後在對應的zookeeper-3.4.6/conf 下有一個檔案zoo_sample.cfg的這個檔案裡面配置了監聽客戶端連線的埠等一些資訊,Zookeeper 在啟動時會找zoo.cfg這個檔案作為預設配置檔案,所以我們複製一個名稱為zoo.cfg的檔案



   •tickTime:這個時間是作為Zookeeper 伺服器之間或客戶端與伺服器之間維持心跳的時間間隔,也就是每個 tickTime 時間就會發送一個心跳,預設最小的會話超時時間為2個tickTime。

   •dataDir:顧名思義就是 Zookeeper儲存資料的目錄,預設情況下,Zookeeper 將寫資料的日誌檔案也儲存在這個目錄裡。

   •dataLogDir:顧名思義就是Zookeeper 儲存日誌檔案的目錄

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

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

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

(3)SpringMVC與Dubbo的整合,這邊使用的Maven的管理專案

服務提供者

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

[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>

說明:

   dubbo:registry 標籤一些屬性的說明:

      1register是否向此註冊中心註冊服務,如果設為false,將只訂閱,不註冊

      2check註冊中心不存在時,是否報錯。

      3subscribe是否向此註冊中心訂閱服務,如果設為false,將只註冊,不訂閱

      4timeout註冊中心請求超時時間(毫秒)

      5address可以Zookeeper叢集配置,地址可以多個以逗號隔開等。

  dubbo:service標籤的一些屬性說明:

     1interface服務介面的路徑

     2ref引用對應的實現類的BeanID

3registry向指定註冊中心註冊,在多個註冊中心時使用,值為<dubbo:registry>id屬性,多個註冊中心ID用逗號分隔,如果不想將該服務註冊到任何registry,可將值設為N/A

     4register 預設true ,該協議的服務是否註冊到註冊中心




載入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. }  
在服務方privoder和消費方consumer的pom.xml中加入Dubbo和Zookeeper的jar包依賴: <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.8</version>
</dependency>

服務消費者

通過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. 相關推薦

    最新的dubbozookeeper整合的問題

    ext nal error: pid contex server ocl exc 修改 最新的dubbo和zookeeper整合的問題 生活本不易,流人遂自安 博主最新在做小項目練手,在進行dubbo和zookeeper整合的時候遇到了一些問題,在這裏這些問題做個小總結

    Spring Boot 整合 DubboZookeeper

    prop pre mode epo con implement 應用 del www. Spring Boot 整合 Dubbo和Zookeeper Spring Boot 整合 Dubbo和Zookeeper 環境介紹 Zookeeper 安裝 啟動 D

    SpringBoot整合DubboZookeeper升級版

    分散式架構與Dubbo基礎入門與實踐一文中初步介紹了分散式架構並使用xml配置方式進行了Dubbo和Zookeeper實踐。分散式應用簡單入門及SpringBoot整合Dubbo+Zookeeper一文中使用SpringBoot整合了Dubbo和Zookeeper但是並未抽取公共API專

    SpringBoot純使用註解整合Dubbozookeeper叢集不配置xml(基於yml)

          因專案需要,搭建了一個新的springBoot專案,開發過程中,原定的基於http提供給其他專案的介面,必須使用dubbo服務提供rpc介面,無奈之下只能去網上找demo,發現現在使用最多的是通過配置xml和bean來整合,沒有通過簡單的註解和yml的配置來實現的

    dubbozookeeper整合使用

    (1)Dubbo介紹: 1.dubbo是一個分散式服務框架,架構圖如下: 節點角色說明: Provider: 暴露服務的服務提供方。Consumer: 呼叫遠端服務的服務消費方。Regis

    SpringBoot與DubboZookeeper實現分散式

    今天就來簡單使用Spring Boot與Dubbo及zookeeper整合使用分散式 首先, 先來簡單瞭解一下什麼是Dubbo及zookeeper Zookeeper Zookeeper是一個分散式的,開放原始碼的分散式應用程式協調服務,它是一個為分散式應用提供一致性服務的軟體,提供的功

    dubbozookeeper隨筆2

    1.服務提供者在zookeeper中註冊自己的服務, provider1: <dubbo:registry address="zookeeper://192.168.1.106:2181"/> provider2: <dubbo:registry a

    為什麼要用dubbodubbozookeeper關係

    為什麼要用dubbo? 當網站規模達到了一定的量級的時候,普通的MVC框架已經不能滿足我們的需求,於是分散式的服務框架和流動式的架構就凸顯出來了。    

    圖解DubboZooKeeper是如何協同工作的?

    介紹 GitHub地址:https://github.com/erlieStar/study-dubbo 微服務是最近比較火的概念,而微服務框架目前主流的有Dubbo和Spring Cloud,兩者都是為了解決微服務遇到的各種問題而產生的,即遇到的問題是一樣的,但是解決的策略卻

    dubbozookeeper的使用

    網上下載zookeeper 下載連結http://download.csdn.net/detail/u013286716/7167881 下載完成後解壓到D盤或其他地方 開啟conf資料夾 把檔名改成圖上所示, 進入bin資料夾 執行zkServer.cmd 啟動成功

    DubboZookeeper常見錯誤解決

    最近在使用阿里的分散式服務中介軟體Dubbo框架重構專案時遇到以下錯誤: 1、Spring配置檔案Dubbo標籤報錯 原因:dubbo約束檔案Key配置錯誤 2.客戶端連線Linux上的Zookeeper註冊中心報錯。 原因一:Zookeeper客戶端

    理解dubbozookeeper聯絡

    zk客戶端命令 ZooKeeper命令列工具類似於Linux的shell環境,不過功能肯定不及shell啦,但是使用它我們可以簡單的對ZooKeeper進行訪問,資料建立,資料修改等操作.  使用 zkCli.sh -server 127.0.0.1:2181 連線到

    dubbo+zookeeper搭建筆記1——dubbozookeeper的安裝

    1、安裝zookeeper.    下載連線:  http://www.apache.org/dist/zookeeper/    解壓後,進入到conf裡面,會看到zoo_sample.cfg檔案。將zoo_sample.cfg改為zoo.cfg,修改相關配置內容(主要更改

    DubboZookeeper、SpringMVC整合使用

    描述 取出 有變 monit work 需要 可用 jqgrid png 互聯網的發展,網站應用的規模不斷擴大,常規的垂直應用架構已無法應對,分布式服務架構以及流動計算架構勢在必行,Dubbo是一個分布式服務框架,在這種情況下誕生的。現在核心業務抽取出來,作為獨立的服務,使

    DubboZookeeper、SpringMVC整合使用(負載均衡、容錯)

    網際網路的發展,網站應用的規模不斷擴大,常規的垂直應用架構已無法應對,分散式服務架構以及流動計算架構勢在必行,Dubbo是一個分散式服務框架,在這種情況下誕生的。現在核心業務抽取出來,作為獨立的服務,使前端應用能更快速和穩定的響應。 第一:介紹Dubbo背景

    SpringBoot整合Dubbo&ZooKeeper

    AI protoc say err ppi develop 提供者 .get toc 前言 關於dubbo這裏就不多說了,想了解更多關於dubbo的請移步到dubbo官網。文章中涉及的代碼都在我的Github:https://github.com/nyvi/dubbo。 服

    dubbo框架Demo之dubbo-admin管理平臺zookeeper註冊中心搭建

    inf 啟動 路徑 class lin 3.4 $path 修改 -m dubbo框架Demo之dubbo-admin管理平臺和zookeeper註冊中心搭建 一、安裝環境 系統軟件環境 單機 系統Centos7.3 java: jdk1.8.0_181 maven:

    關於Maven+Springmvc+Dubbo+Zookeeper整合

    為什麼要用dubbo?   還是讓官方來解釋吧: http://dubbo.io/User+Guide-zh.htm    http://dubbo.io/   一般 nginx+tomcat       

    Dubbo教程-01-簡單介紹springboot整合

    寫在前面 hello 大家好 我是御風 歡迎大家收看御風大世界 今天我們迎來了Dubbo系列教程第1課 本次課我大家介紹分散式系統、dubbo框架 以及 演示一個 dubbo 的helloworld程式 看視訊演示請去 B站 https://www.bili

    Dubbo、Spring、Zookeeper整合基礎案例

    摘要:最近抽時間系統的學習了Dubbo的一些內容,趁有時間,整理下,順便記錄下,以防以後回顧。 一:執行環境 1>:JDK 1.8 2>:IDEA 2018.1 3>:Zook