Spring Cloud 進階--Rest微服務加入Config實現分佈式配置中心綜合實戰

                          《 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
版權聲明: 本文爲博主原創文章,請在轉載時務必註明博文出處!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章