1. 程式人生 > >dubbo+zookeeper 分散式專案搭建

dubbo+zookeeper 分散式專案搭建

一、簡介

1.1 dubbo介紹

Dubbo是阿里巴巴公司開源的一個高效能優秀的服務框架,使得應用可通過高效能的 RPC 實現服務的輸出和輸入功能,可以和 Spring框架無縫整合。

1.2主要核心部件

Remoting: 網路通訊框架,實現了 sync-over-async 和 request-response 訊息機制.RPC: 一個遠端過程呼叫的抽象,支援負載均衡容災叢集功能Registry: 服務目錄框架用於服務的註冊和服務事件釋出和訂閱

1.3 工作原理

Provider暴露服務方稱之為“服務提供者”。Consumer呼叫遠端服務方稱之為“服務消費者”。Registry服務註冊與發現的中心目錄服務稱之為“服務註冊中心”。Monitor
統計服務的呼叫次數和呼叫時間的日誌服務稱之為“服務監控中心”。(1) 連通性:註冊中心負責服務地址的註冊與查詢,相當於目錄服務,服務提供者和消費者只在啟動時與註冊中心互動,註冊中心不轉發請求,壓力較小監控中心負責統計各服務呼叫次數,呼叫時間等,統計先在記憶體彙總後每分鐘一次傳送到監控中心伺服器,並以報表展示服務提供者向註冊中心註冊其提供的服務,並彙報呼叫時間到監控中心,此時間不包含網路開銷服務消費者向註冊中心獲取服務提供者地址列表,並根據負載演算法直接呼叫提供者,同時彙報呼叫時間到監控中心,此時間包含網路開銷註冊中心,服務提供者,服務消費者三者之間均為長連線,監控中心除外註冊中心通過長連線感知服務提供者的存在,服務提供者宕機,註冊中心將立即推送事件通知消費者註冊中心和監控中心全部宕機,不影響已執行的提供者和消費者,消費者在
本地快取
了提供者列表註冊中心和監控中心都是可選的,服務消費者可以直連服務提供者(2) 健壯性:監控中心宕掉不影響使用,只是丟失部分取樣資料資料庫宕掉後,註冊中心仍能通過快取提供服務列表查詢,但不能註冊新服務註冊中心對等叢集,任意一臺宕掉後,將自動切換到另一臺註冊中心全部宕掉後,服務提供者和服務消費者仍能通過本地快取通訊服務提供者無狀態,任意一臺宕掉後,不影響使用服務提供者全部宕掉後,服務消費者應用將無法使用,並無限次重連等待服務提供者恢復(3) 伸縮性:註冊中心為對等叢集,可動態增加機器部署例項,所有客戶端將自動發現新的註冊中心服務提供者無狀態,可動態增加機器部署例項,註冊中心將推送新的服務提供者資訊給消費者

二、案列分析

2.1 架構

在dubbo-test中建立了三個modle,分別為service介面層,service實現層以及MVC層,dao層這裡省略。

 

 2.2 service層

  這裡的service層只有寫了個簡單的介面,後續複雜的同理既可。


2.3 serviceimpl介面層(服務提供者:provider)

     主要是實現2.2中的介面,需要在serviceimpl中匯入service生成的jar包,可以直接使用maven安裝到倉庫,然後在pom中直接新增依賴既可。


專案中使用到的jar包和依賴,在本專案中我直接全部使用依賴的時候出現jar包衝突,所有我把一部分jar包和依賴分開了。


<?xml version="1.0"?>
<project
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
	xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>com.bsoft.cn</groupId>
		<artifactId>dubbo-test</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<groupId>com.bsoft.cn</groupId>
	<artifactId>dubbo-serviceimpl</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>
	<name>dubbo-serviceimpl Maven Webapp</name>
	<url>http://maven.apache.org</url>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>com.bsoft.cn.dubbo</groupId>
			<artifactId>dubbo-service</artifactId>
			<version>1.0</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>4.3.10.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.apache.curator</groupId>
			<artifactId>curator-framework</artifactId>
			<version>2.8.0</version>
		</dependency>
		<dependency>
			<groupId>org.apache.curator</groupId>
			<artifactId>curator-recipes</artifactId>
			<version>2.8.0</version>
		</dependency>

	</dependencies>
	<build>
		<finalName>dubbo-serviceimpl</finalName>
	</build>
</project>

applicationContext.xml配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:task="http://www.springframework.org/schema/task" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	    http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
		http://www.springframework.org/schema/context 
		http://www.springframework.org/schema/context/spring-context-3.2.xsd 
    	http://www.springframework.org/schema/task  
		http://www.springframework.org/schema/task/spring-task-3.1.xsd
		http://dubbo.apache.org/schema/dubbo 
		http://dubbo.apache.org/schema/dubbo/dubbo.xsd"
	    default-lazy-init="true">

	<!-- 自動掃描 --> 
    <context:component-scan base-package="com.bsfot.dubbo.serviceimpl" /> 
   
   <!--1. 配置別名,目的在後臺可以看到這個服務的別名,名字可以任意取 -->
   <dubbo:application name="testDubbo"/>
   <!--2.配置註冊中心 -->
   <dubbo:registry address="192.168.20.131:2181" protocol="zookeeper"/>
   <!-- 
      3.告訴註冊中心我是誰
      interface:介面
      ref:地表的是到底具體釋出哪個服務(介面實現類)
      timeout:連線超時時間
    -->
   <dubbo:service interface="com.bsoft.cn.dubbo.service.TestDubboService" ref="dubboServiceImpl" timeout="60000"/>
   <!--4.配置埠 
       消費者要想連線我們,必須通過我們提供的ip和埠
    -->
    <dubbo:protocol name="dubbo" port="12345"/>
    
	
</beans>

提供者在dubbo影象化介面顯示如下:


2.4 MVC層(消費者:consumer)

      mvc層也要使用到service介面,所以也要引入service層生成的jar,同樣直接引入依賴既可。

程式碼:

依賴:

<?xml version="1.0"?>
<project
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
	xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>com.bsoft.cn</groupId>
		<artifactId>dubbo-test</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<groupId>com.bsoft.cn</groupId>
	<artifactId>dubbo-web</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>
	<name>dubbo-web Maven Webapp</name>
	<url>http://maven.apache.org</url>
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>4.3.18.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>com.bsoft.cn.dubbo</groupId>
			<artifactId>dubbo-service</artifactId>
			<version>1.0</version>
		</dependency>
		<dependency>
			<groupId>org.apache.curator</groupId>
			<artifactId>curator-framework</artifactId>
			<version>2.8.0</version>
		</dependency>
		<dependency>
			<groupId>org.apache.curator</groupId>
			<artifactId>curator-recipes</artifactId>
			<version>2.8.0</version>
		</dependency>

	</dependencies>
	<build>
		<finalName>dubbo-web</finalName>
	</build>
</project>

applicationContext.xml配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:task="http://www.springframework.org/schema/task" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	    http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
		http://www.springframework.org/schema/context 
		http://www.springframework.org/schema/context/spring-context-3.2.xsd 
    	http://www.springframework.org/schema/task  
		http://www.springframework.org/schema/task/spring-task-3.1.xsd
		http://dubbo.apache.org/schema/dubbo 
		http://dubbo.apache.org/schema/dubbo/dubbo.xsd"
	    default-lazy-init="true">

<!-- 自動掃描 --> 
    <context:component-scan base-package="com.bsoft.cn.dubbo" /> 
	<!-- 
	    查詢遠端服務,找到對應的註冊中心
	 -->
	 <!--1. 配置別名,目的在後臺可以看到這個服務的別名,名字可以任意取 -->
   <dubbo:application name="consumer"/>
   <!--2.配置註冊中心 -->
   <dubbo:registry address="192.168.20.131:2181" protocol="zookeeper"/>
   <!--3.告訴註冊中心我要什麼 -->
   <dubbo:reference interface="com.bsoft.cn.dubbo.service.TestDubboService" id="testService"/>
	
</beans>

消費者在dubbo影象化介面顯示如下:


三 總結

在此次的學習中,遇到最大的問題是jar包的衝突,全部使用依賴引入jar時tomcat會啟動異常,所以最後有些jar包是在lib下直接引入的。這個地方坑了好長時間,經驗不足,寫的不好的地方還請指出相互討論。

四 案列資源下載

上面的案列已經放到GitHub裡面,有需要的可以去下載:原始碼地址

dubbo-admin下載地址:百度網盤連結:https://pan.baidu.com/s/1vpAhfnsmDgjPNsIMNDTGwg 密碼:zm7d

相關推薦

dubbo+zookeeper 分散式專案搭建

一、簡介1.1 dubbo介紹Dubbo是阿里巴巴公司開源的一個高效能優秀的服務框架,使得應用可通過高效能的 RPC 實現服務的輸出和輸入功能,可以和 Spring框架無縫整合。1.2主要核心部件Remoting: 網路通訊框架,實現了 sync-over-async 和 r

Maven多模組+dubbo+zookeeper分散式架構搭建SSM專案

Maven多模組的構建: 一、總體結構預覽 |----parent模組     |-----manage聚合工程模組     |       |------pojo類     |       |------dao層     |       |------service介面層

基於dubbo分散式專案框架搭建 開發工具idea (springboot+dubbo+zookeeper+redis+rabbitmq+基於Swagger2的restful api) --(二)

1.dubbo-admin 2.5.8的安裝 http://dubbo.apache.org/en-us/index.html 點選GITHUB 跳轉到github下載dubbo原始碼  點選Branch切換到Tags,找到對應的2.5.8版本,下載該版本,下載解壓完以後

基於dubbo分散式專案框架搭建 開發工具idea (springboot+dubbo+zookeeper+redis+rabbitmq+基於Swagger2的restful api) --(一)

1. spring-boot web框架下載配置 https://start.spring.io/ 點選Switch to the full version  勾選詳細的配置   根據需要更改group atrifact...等資訊 &nb

基於dubbo分散式專案框架搭建 開發工具idea (springboot+dubbo+zookeeper+redis+rabbitmq+基於Swagger2的restful api) --(四)

1.rabbitmq的整合 首先在配置檔案裡增加 #rabbitMQ spring.rabbitmq.host=127.0.0.1 spring.rabbitmq.port=5672 spring.rabbitmq.username=root spring.rabbitmq.password

基於dubbo分散式專案框架搭建 開發工具idea (springboot+dubbo+zookeeper+redis+rabbitmq+基於Swagger2的restful api) --(三)

1.dubbo註冊中心zookeeper 的安裝 http://mirrors.shu.edu.cn/apache/zookeeper/ 選擇對應的版本下載即可 修改zoo_sample.cfg為zoo.cfg(可以先備份一份) 在安裝目錄新建data和log目錄 修改zo

在windows環境搭建dubbo+zookeeper分散式服務架構

Dubbo背景和簡介 Dubbo開始於電商系統,因此在這裡先從電商系統的演變講起。 1.單一應用框架(ORM) 當網站流量很小時,只需一個應用,將所有功能如下單支付等都部署在一起,以減少部署節點和成本。 缺點:單一的系統架構,使得在開發過程

Dubbo+Zookeeper的環境搭建

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

Zookeeper——分散式叢集搭建

準備伺服器 - 192.168.214.150 centos6-1 - 192.168.214.151 centos6-2 - 192.168.214.152 centos6-3 Java環境 檢視java版本 [root@cent

dubbo+zookeeper 分散式應用的快速入門

參考地址:https://blog.csdn.net/hua1586981/article/details/79195111  網際網路的快速迭代,隨之而來的客戶需求的不斷變更,要求開發人員,具有敏捷的反應能力,快速應對需求變化。怎麼快速應對變化,當然一個高可用,低耦合的分散式框架少不了

dubbo+zookeeper分散式服務【個人理解分享】

看了一篇文章,介紹dubbo的原理,但是跟著做了下,發現該文章存在些許問題,及一些令新手比較費解的知識點沒有介紹,在此篇博文僅介紹個人觀點及程式碼實測結論。 百科dubbo,其實講的已經比較詳細。文後附上測試程式碼,方便大家測試 下面是dubbo的原理圖: 一、首先,搭建zooke

[dubbo實戰] dubbo+zookeeper偽叢集搭建

    zookeeper作為註冊中心,伺服器和客戶端都要訪問,如果有大量的併發,肯定會有等待。所以可以通過zookeeper叢集解決。 一、為什麼需要zookeeper呢?    大部分分散式應用需

Spring +SpringMVC+mybatis+dubbo idea分層專案搭建

 前言:        這是我們常用的專案結構,一個稍微大一點的專案都會用到分散式,索性今天就把dubbo也加上,至於為什麼要用idea,應為個人喜歡這款編輯器吧。下面我們就開始。第一步:專案結構建立整體結構是這樣的,採用的是三層專案結構,整體pom.xml應用流程是這樣的:

hadoop+hbase+zookeeper 分散式叢集搭建完美執行

備註:      搭建完(hadoop+hbase)整個叢集是能夠完美的執行,其中期間出過些小問題,如有一臺機器和其他機器時間相差很遠,結果是HRegionServer啟動的時候超時,這個時候要麼時間同步,或者在配置檔案中新增相應的引數      我所在的實驗室,整個叢集是

Dubbo+zookeeper入門示例搭建

-安裝zookeeper 1.在官網上下載zookeeper安裝檔案,解壓,重新命名zookeeper-3.4.5\conf目錄下的zoo_sample.cfg為zoo.cfg 2.在zookeeper-3.4.5\bin目錄下,雙擊zk

SSM+dubbo+zookeeper簡單搭建分散式框架之專案配置

基於我們的需要的環境、條件準備好後,就可以搭建專案了。github專案地址:https://github.com/dairuijie/dubbo_demo1、新建四個maven 專案 分別是dubbo_core   這個是統一配置pom.xml  其他三個pom.xml 依賴

springboot + dubbo + zookeeper 註冊中心 + maven多模組專案框架搭建具體操作

1. 專案搭建前瞭解: Maven多模組專案可以解決專案中出現多個相同的jar包和service介面以及實體類物件的問題,可以將相同的提取成一個專案來維護管理,然後其他需要用到則只要引用jar包即可使用。 2. 將springboot + dubbo + zookeeper專案進行拆分: 生

springboot + mybatis + mysql + dubbo+ zookeeper一個簡單的分散式搭建過程

結合了網上的兩篇部落格綜合實現了一下整體的過程:Dubbo為什麼要與zookeeper/Consule一起使用?dubbo主要是一個分散式服務框架,致力於提供高效能和透明化的RPC遠端服務呼叫方案,以及SOA服務治理方案。簡單的說,dubbo就是個服務框架,如果沒有分散式的需

【Java】Dubbo+zookeeper搭建分散式服務框架

一、前言      前一段時間,小編工作的架構換成了Dubbo的分散式架構,專案也改成了SOA(面向服務的架構),在專案中分成了六個服務,每個服務可以單獨執行,服務之間也可以互相呼叫。下面小編就Dubbo官網提供的一個簡單的Demo來帶領大家實現一個分散式服務框架。二、環境要

Dubbo + zookeeper搭建分散式服務入門(帶原始碼)

dubbo + zookeeper 搭建分散式服務入門 dubbo是阿里開源的高效能RPC框架,框架圖如下: 可以分為4個部分,註冊中心,消費者,提供者和監控中心,這也是一般分散式服務的常見架構。 本文作為dubbo入門例子,採用zookeeper作為註冊