1. 程式人生 > >Spring Boot 整合dubbo與zookeeper實現不同專案之間資料通過服務的傳遞

Spring Boot 整合dubbo與zookeeper實現不同專案之間資料通過服務的傳遞

一、安裝zookeeper 1、下載路徑:http://mirrors.hust.edu.cn/apache/zookeeper/ 可以自己選擇版本進行下載(同時支援windows和linux) 2、目錄結構 在這裡插入圖片描述 3、修改conf下的配置檔案zoo.cfg 在這裡插入圖片描述 4、啟動zookeeper windows環境下,在zookeeper的bin目錄下雙擊zkServer.cmd即可啟動zookeeper伺服器端 在這裡插入圖片描述啟動之後是這樣的狀態 5、啟動客戶端(雙擊zkCli.cmd) 在這裡插入圖片描述 二、建立服務提供者專案 1、建立一個maven project 在這裡插入圖片描述 勾選create a simple project 建立一個簡單的示例專案(預設是javaWeb專案) 在這裡插入圖片描述

點選next,輸入相關資訊,這裡a-parent專案是已經存在的,所以提示一個相應的錯誤,再點選finish 就建立好了 在這裡插入圖片描述 2、建立a專案下的module 在這裡插入圖片描述 這裡直接點選finish即可 在這裡插入圖片描述 目前測試看效果,就建立一下三個module 在這裡插入圖片描述 3、在a-parent父級專案中的pom.xml檔案中新增相關的依賴

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.system.a</groupId>
	<artifactId>a-parent</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>pom</packaging>
	<!-- 宣告父級的依賴,宣告在這裡,所有的module都會繼承這個依賴,這裡不解釋繼承的概念 -->
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.13.RELEASE</version>
	</parent>
	<!-- 聲明當前pom檔案的屬性配置 -->
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<dubbo-spring-boot>1.0.0</dubbo-spring-boot>
	</properties>
	<dependencies>
		<!-- 引入Spring Boot Web -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
	 	<!-- 引入Spring Boot Dubbo -->
	 	<dependency>
            <groupId>io.dubbo.springboot</groupId>
            <artifactId>spring-boot-starter-dubbo</artifactId>
            <version>${dubbo-spring-boot}</version>
        </dependency>
		<!-- 引入zookeeper的客戶端 -->
		<dependency>
			<groupId>com.github.sgroschupf</groupId>
			<artifactId>zkclient</artifactId>
			<version>0.1</version>
		</dependency> 
		<!-- 引入 zookeeper的伺服器端 -->
		<dependency>
			<groupId>org.apache.zookeeper</groupId>
			<artifactId>zookeeper</artifactId>
			<version>3.4.5</version>
			<!-- 該標籤內的依賴會不再引入進來,這裡是為了不和spring boot starter web 中的日誌出現衝突 -->
			<exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
            </exclusions>
		</dependency>
	</dependencies>
	<!-- 三個module專案 -->
	<modules>
		<module>a-service</module>
		<module>a-boot</module>
		<module>a-domain</module>
	</modules>
</project>

4、建立application.properties 在這裡插入圖片描述

spring.datasource.driverClassName=com.mysql.jdbc.Driver

spring.datasource.url=jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
server.port=8888
# 下面為連線池的補充設定,應用到上面所有資料來源中
# 初始化大小,最小,最大
spring.datasource.initialSize=5
spring.datasource.minIdle=5
spring.datasource.maxActive=20
# 配置獲取連線等待超時的時間
spring.datasource.maxWait=60000
# 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連線,單位是毫秒 
spring.datasource.timeBetweenEvictionRunsMillis=60000
# 配置一個連線在池中最小生存的時間,單位是毫秒 
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=SELECT 1 FROM DUAL
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
# 開啟PSCache,並且指定每個連線上PSCache的大小 
spring.datasource.poolPreparedStatements=true
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
# 配置監控統計攔截的filters,去掉後監控介面sql無法統計,'wall'用於防火牆 
spring.datasource.filters=stat,wall,log4j
# 通過connectProperties屬性來開啟mergeSql功能;慢SQL記錄
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 合併多個DruidDataSource的監控資料
#spring.datasource.useGlobalDataSourceStat=true
spring.http.multipart.maxFileSize=10Mb
spring.http.multipart.maxRequestSize=100Mb
spring.mvc.view.prefix=/
spring.mvc.view.suffix=.jsp
mybatis.type-aliases-package=com.distributed
mybatis.mapper-locations:classpath:com/distributed/mapper/*.xml
#當查詢資料為空時欄位返回為null,不加這個查詢資料為空時,欄位將被隱藏
mybatis.configuration.call-setters-on-nulls=true
#spring.cache.ehcache.config=classpath:ehcache.xml
logging.level.com.muck.controller=error
logging.level.com.muck.mapper=debug
logging.level.com.muck.service.impl=error
logging.path=D:/usr/local/application/muck/log/mucklog

# Dubbo 服務提供者配置
#伺服器端app名稱
spring.dubbo.application.name=distributed-provider
#需要將當前專案的服務註冊在的目標服務註冊中心
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
#伺服器端節點名稱
spring.dubbo.protocol.name=dubbo
#伺服器端節點的埠
spring.dubbo.protocol.port=20880
#掃描以下包目錄,並將其中的服務註冊到服務註冊中心
spring.dubbo.scan=com.a.service

5、編寫啟動類,並測試專案是否可以正常啟動(右鍵run as java application) 在這裡插入圖片描述

6、寫一個簡單的服務提供者所提供的服務 首先建一個使用者的實體類,這裡一定要序列化,由於資料通過二進位制在專案之間進行傳遞,需要實現序列化 在這裡插入圖片描述 寫一個獲取所有使用者的Service 在這裡插入圖片描述 在這裡插入圖片描述 以下是最重要的部分,這裡要使用引入的dubbo下的Service註解version是服務的版本,這是要註冊到服務註冊中心的服務版本 在這裡插入圖片描述 然後啟動專案,看配置的該服務是否註冊到了服務註冊中心zookeeper 在這裡插入圖片描述

三、建立服務消費者專案(建立方式和一般的spring boot 專案建立方式一樣,和提供者的專案建立方式也一樣,主要就是相關的application.properties和pom依賴) 1、pom.xml依賴

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.b</groupId>
	<artifactId>b-parent</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>pom</packaging>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.13.RELEASE</version>
	</parent>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>io.dubbo.springboot</groupId>
			<artifactId>spring-boot-starter-dubbo</artifactId>
			<version>1.0.0</version>
		</dependency>
		<dependency>
			<groupId>com.github.sgroschupf</groupId>
			<artifactId>zkclient</artifactId>
			<version>0.1</version>
		</dependency> 
	</dependencies>
	<modules>
		<module>b-controller</module>
		<module>b-boot</module>
		<module>b-domain</module>
	</modules>
</project>

2、application.properties

spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
server.port=8889
# 下面為連線池的補充設定,應用到上面所有資料來源中
# 初始化大小,最小,最大
spring.datasource.initialSize=5
spring.datasource.minIdle=5
spring.datasource.maxActive=20
# 配置獲取連線等待超時的時間
spring.datasource.maxWait=60000
# 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連線,單位是毫秒 
spring.datasource.timeBetweenEvictionRunsMillis=60000
# 配置一個連線在池中最小生存的時間,單位是毫秒 
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=SELECT 1 FROM DUAL
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
# 開啟PSCache,並且指定每個連線上PSCache的大小 
spring.datasource.poolPreparedStatements=true
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
# 配置監控統計攔截的filters,去掉後監控介面sql無法統計,'wall'用於防火牆 
spring.datasource.filters=stat,wall,log4j
# 通過connectProperties屬性來開啟mergeSql功能;慢SQL記錄
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 合併多個DruidDataSource的監控資料
#spring.datasource.useGlobalDataSourceStat=true
spring.http.multipart.maxFileSize=10Mb
spring.http.multipart.maxRequestSize=100Mb
spring.mvc.view.prefix=/
spring.mvc.view.suffix=.jsp
mybatis.type-aliases-package=com.distributed
mybatis.mapper-locations:classpath:com/distributed/mapper/*.xml
#當查詢資料為空時欄位返回為null,不加這個查詢資料為空時,欄位將被隱藏
mybatis.configuration.call-setters-on-nulls=true
spring.cache.ehcache.config=classpath:ehcache.xml
logging.level.com.muck.controller=error
logging.level.com.muck.mapper=debug
logging.level.com.muck.service.impl=error
logging.path=D:/usr/local/application/muck/log/mucklog

# Dubbo 服務消費者配置
spring.dubbo.application.name=distributed-consumer-1
# 註冊中心 0
spring.dubbo.application.registries[0].address=zookeeper://127.0.0.1:2181
# 註冊中心 1
#spring.dubbo.application.registries[1].address=zookeeper://127.0.0.1:2182
#服務消費者啟動時dubbo的埠
spring.dubbo.protocol.port=65482
#掃描需要服務所在的包目錄,這個要和服務提供者保持一致
spring.dubbo.scan=com.a.service

3、相關目錄結構

在這裡插入圖片描述 4、controller呼叫註冊好的服務 在這裡插入圖片描述 5、啟動b專案 在這裡插入圖片描述 6、呼叫b專案提供給前臺頁面的介面 在這裡插入圖片描述