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專案提供給前臺頁面的介面