《 Rest微服務加入Config實現分佈式配置中心綜合實戰 》
前言
在前面已經完成了《 Rest微服務加入Config實現分佈式配置中心客戶端的配置 》構建工作,並順利的從 GitHub 上獲取到了相應的環境配置內容。接下來將實現一個基於Spring Cloud Config 分佈式配置中心的 Spring Cloud Eureka 註冊中心 + 服務提供者模塊 的一個微服務組合,並將兩個微服務的配置內容統一交由 Spring Cloud Config 分佈式配置中心服務端模塊進行管理,通過該模塊來獲取相應的配置內容 ,完成不同環境(開發環境、測試環境、發佈環境、生產環境等)的輕鬆切換。涉及的服務模塊包括:
- 新增配置中心 Eureka 微服務配置文件,文件名爲 “ eureka-client-microservice-config-center.yml ”;
- 新增配置中心 Provider 服務提供者微服務配置文件,文件名爲 “ etcp-client-microservice-config-center.yml ”;
- 新構建基於 SpringCloud Config 分佈式配置中心的 Eureka 服務註冊中心模塊,模塊名爲 “ microservice-config-eureka-7001 ”;
- 新構建基於 SpringCloud Config 分佈式配置中心的 Provider 服務提供者模塊,模塊名爲 “ microservice-config-provider-8001 ”;
Config實現分佈式配置中心綜合實戰
1、新增完成 Eureka 及 服務提供者 YML 配置文件的編寫,並推送到遠程 GitHub 倉庫
新增 Eureka 相關的環境配置文件,配置文件名稱爲 “ eureka-client-microservice-config-center.yml ” ,完整內容如下:
spring:
profiles:
active:
- dev
--- # 開發環境配置
server:
port: 7001 # 該服務註冊中心採用7001端口,冒號後面必須要有空格
spring:
profiles: dev
application:
name: eureka-client-microservice-config-center
eureka:
instance:
hostname: www.eurekaconfig7001.com # 冒號後面必須要有空格
client:
register-with-eureka: false # 當前的eureka-server自己不註冊進服務列表中
fetch-registry: false # 不通過eureka獲取註冊信息
service-url:
defaultZone: http://www.eurekaconfig7001.com:7001/eureka/
--- # 測試環境
server:
port: 7001 # 該服務註冊中心採用7001端口,冒號後面必須要有空格
spring:
profiles: test
application:
name: eureka-client-microservice-config-center
eureka:
instance:
hostname: www.eurekaconfig7001.com # 冒號後面必須要有空格
client:
register-with-eureka: false # 當前的eureka-server自己不註冊進服務列表中
fetch-registry: false # 不通過eureka獲取註冊信息
service-url:
defaultZone: http://www.eurekaconfig7001.com:7001/eureka/
--- # 生產環境
server:
port: 7001 # 該服務註冊中心採用7001端口,冒號後面必須要有空格
spring:
profiles: prod
application:
name: eureka-client-microservice-config-center
eureka:
instance:
hostname: www.eurekaconfig7001.com # 冒號後面必須要有空格
client:
register-with-eureka: false # 當前的eureka-server自己不註冊進服務列表中
fetch-registry: false # 不通過eureka獲取註冊信息
service-url:
defaultZone: http://www.eurekaconfig7001.com:7001/eureka/
新增 Provider 相關的環境配置文件,文件配置名稱爲 “ etcp-client-microservice-config-center.yml ” ,完整內容如下:
spring:
profiles:
active:
- dev
--- # 開發環境
server:
port: 8001
spring:
profiles: dev
application:
name: etcp-client-microservice-config-center
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: org.gjt.mm.mysql.Driver
url: jdbc:mysql://***.***.***.***:*****/microservice-01
username: *****
password: ************
dbcp2:
min-idle: 5
initial-size: 5
max-total: 5
max-wait-millis: 200
mybatis:
config-location: classpath:mybatis/mybatis.cfg.xml
type-aliases-package: com.huazai.springcloud.entity
mapper-locations:
- classpath:mybatis/mapper/**/*.xml
eureka:
client: # 將客戶端註冊進eureka服務列表內
service-url:
defaultZone: http://www.eureka7001.com:7001/eureka
instance:
instance-id: microservice-provider-8001
prefer-ip-address: true
info:
app.name: etc-microservice-springcloud
company.name: huazai-studio
build.artifactId: $project.artifactId$
build.version: $project.version$
--- # 測試環境
server:
port: 8001
spring:
profiles: test
application:
name: etcp-client-microservice-config-center
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: org.gjt.mm.mysql.Driver
url: jdbc:mysql://***.***.***.***:*****/microservice-02
username: *****
password: ************
dbcp2:
min-idle: 5
initial-size: 5
max-total: 5
max-wait-millis: 200
mybatis:
config-location: classpath:mybatis/mybatis.cfg.xml
type-aliases-package: com.huazai.springcloud.entity
mapper-locations:
- classpath:mybatis/mapper/**/*.xml
eureka:
client: # 將客戶端註冊進eureka服務列表內
service-url:
defaultZone: http://www.eureka7001.com:7001/eureka
instance:
instance-id: microservice-provider-8001
prefer-ip-address: true
info:
app.name: etc-microservice-springcloud
company.name: huazai-studio
build.artifactId: $project.artifactId$
build.version: $project.version$
--- # 發佈環境
server:
port: 8001
spring:
profiles: prod
application:
name: etcp-client-microservice-config-center
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: org.gjt.mm.mysql.Driver
url: jdbc:mysql://***.***.***.***:*****/microservice-03
username: *****
password: ************
dbcp2:
min-idle: 5
initial-size: 5
max-total: 5
max-wait-millis: 200
mybatis:
config-location: classpath:mybatis/mybatis.cfg.xml
type-aliases-package: com.huazai.springcloud.entity
mapper-locations:
- classpath:mybatis/mapper/**/*.xml
eureka:
client: # 將客戶端註冊進eureka服務列表內
service-url:
defaultZone: http://www.eureka7001.com:7001/eureka
instance:
instance-id: microservice-provider-8001
prefer-ip-address: true
info:
app.name: etc-microservice-springcloud
company.name: huazai-studio
build.artifactId: $project.artifactId$
build.version: $project.version$
新建完成後,推送到遠程 GitHub 倉庫中,使用命令
“ git add . ”
“ git commit -a -m " 版本註釋 " ”
“ git push origin master ”
如下圖:
4、新增 Eureka 註冊中心模塊,服務名稱爲 “ microservice-config-eureka-7001 ”
新增 POM 配置文件,完整配置內容如下:
<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>
<parent>
<groupId>com.huazai.springcloud</groupId>
<artifactId>microservice</artifactId>
<version>${project.version}</version>
</parent>
<artifactId>microservice-config-eureka-client-7001</artifactId>
<dependencies>
<!-- SpringCloudConfig配置 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
<!-- 熱部署插件 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
</dependencies>
</project>
新增系統配置文件 “ bootstrap.yml ” ,完整配置內容如下:
spring:
cloud:
config:
name: eureka-client-microservice-config-center # 從 github 上讀取的資源名稱,注意沒有yml後綴名
profile: prod # 配置默認的環境
label: master # 從 master 分支上獲取配置信息
uri: http://www.config5001.com:5001 # Spring Cloud Config 獲取的服務地址
新增 “ application.yml ” 配置文件,完整配置內容如下:
spring:
application:
name: eureka-client-microservice-config-center
新增主啓動類 “ MicroserviceConfigEurekaApp_7001 ” ,並新增註解 “ @EnableEurekaServer ” 開啓 Eureka 服務器端的支持,完整內容如下:
package com.huazai.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
/**
*
* @author HuaZai
* @contact [email protected]
* <ul>
* @description
* <li> Eureka Server 服務器端啓動類,接受其它微服務註冊進來
* </ul>
* @className MicroserviceConfigEurekaClient_7001
* @package com.huazai.springcloud
* @createdTime 2018年05月05日 下午5:52:07
*
* @version V1.0.0
*/
@SpringBootApplication
@EnableEurekaServer
public class MicroserviceConfigEurekaApp_7001
{
public static void main(String[] args)
{
SpringApplication.run(MicroserviceConfigEurekaApp_7001.class, args);
}
}
基於 Spring Cloud Config 分佈式配置中心的 Eureka 服務註冊中西 構建完成後,項目總覽如下圖:
測試 Eureka 註冊中心,首先啓動 Spring Cloud Config 分佈式配置中心服務端服務器,再啓動基於 Config 的 Eureka 服務器,根據定義的環境,訪問 Eureka 服務器,配置正常,會出現如下圖:
5、新增基於 Spring Cloud Config 分佈式配置中心的提供者服務,參考之前的一號提供者服務器 “ microservice-provider-8001 ” 新建 “ microservice-config-provider-8001 ”。
新增 POM 配置文件,完整內容如下:
<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>
<parent>
<groupId>com.huazai.springcloud</groupId>
<artifactId>microservice</artifactId>
<version>${project.version}</version>
</parent>
<artifactId>microservice-config-provider-8001</artifactId>
<dependencies>
<!-- 引入自己定義的api通用包,可以使用Dept部門Entity -->
<dependency>
<groupId>com.huazai.springcloud</groupId>
<artifactId>microservice-api</artifactId>
<version>${project.version}</version>
</dependency>
<!-- Spring Cloud Config 相關 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- eureka 相關 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<!-- 數據庫相關 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
</dependency>
<!-- spring boot 相關 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!-- 熱部署相關 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
</dependencies>
</project>
系統配置文件 “ bootstrap.yml ” ,完整內容如下:
spring:
cloud:
config:
name: etcp-client-microservice-config-center # 從 github 上讀取的資源名稱,注意沒有yml後綴名
profile: prod # 配置默認的環境
label: master # 從 master 分支上獲取配置信息
uri: http://www.config5001.com:5001 # Spring Cloud Config 獲取的服務地址
application.yml ,主要作用爲指定使用倉庫中的那個配置文件,完整內容如下:
spring:
application:
name: etcp-client-microservice-config-center
修改主啓動類 “ MicroserviceConfigProviderApp_8001 ”,完整內容如下:
package com.huazai.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
/**
*
* @author HuaZai
* @contact [email protected]
* <ul>
* @description
* <li>服務提供者1號服務器
* </ul>
* @className MicroserviceProviderApp_8001
* @package com.huazai.springcloud
* @createdTime 2018年05月06日 下午2:21:44
*
* @version V1.0.0
*/
@SpringBootApplication
@EnableEurekaClient // 本服務啓動後會自動註冊進eureka服務中
@EnableDiscoveryClient // 服務發現
public class MicroserviceConfigProviderApp_8001
{
public static void main(String[] args)
{
SpringApplication.run(MicroserviceConfigProviderApp_8001.class, args);
}
}
基於 Spring Cloud Config 分佈式配置中心的 Provider 提供者服務器創建完成後,項目概覽如下圖:
注意:關於系統配置文件 “ bootstrap.yml ” 裏的 profile 屬性:該屬性起到至關重要的作用,它直接決定了環境,通過該屬性可以便捷的切換環境,該屬性的屬性值直接決定能從 GitHub 上取得什麼樣的環境配置,例如:在上面的 etcp-client-microservice-config-center.yml 環境配置內容中,開發環境 dev 使用 1 號數據庫,測試環境 test 使用 2 號數據庫,發佈環境 prod 使用 3 號數據庫,這樣一來就達到了分佈式配置的目的。
測試
測試開發環境,啓動基於 Spring Cloud Config 分佈式配置中心的提供者服務器,並訪問提供者服務器地址,可以看到連接的是 1 號數據庫,如下圖:
測試環境:
發佈環境:
GitLab 源碼地址:
項目源碼地址(zip格式的工程包):
好了,關於 Spring Cloud 進階--Rest微服務加入config分佈式配置中心實戰 就寫到這兒了,如果還有什麼疑問或遇到什麼問題歡迎掃碼提問,也可以給我留言哦,我會一一詳細的解答的。
歇後語:“ 共同學習,共同進步 ”,也希望大家多多關注CSND的IT社區。
作 者: | 華 仔 |
聯繫作者: | [email protected] |
來 源: | CSDN (Chinese Software Developer Network) |
原 文: | https://blog.csdn.net/Hello_World_QWP/article/details/88087904 |
版權聲明: | 本文爲博主原創文章,請在轉載時務必註明博文出處! |