SpringCloud 進階之分布式配置中心(SpringCloud Config)


1. SpringCloud Config

  • SpringCLoud Config 為微服務架構中的微服務提供集中化的外部配置支持,配置服務器為各個不同微服務應用
    的所有環境提供了一個中心化的外部配置;
  • SpringCloud Config 分為服務端和客戶端:
    • 服務端也稱為分布式配置中心,它是一個獨立的微服務應用,用來連接配置服務器並為客戶端提供獲取配置信息,
      加密/解密信息等訪問接口;
    • 客戶端則是通過指定的配置中心來管理應用資源,以及與業務相關的配置內容,並在啟動的時候從配置中心獲取和
      加載配置信息;
  • 配置服務器默認采用Git來存儲配置信息;

1.1 SpringCloud Config服務端配置

GitHub 准備工作

// GitHub 新建一個名為 microservicecloudd-config 的新Repository
// 獲得SSH協議的git地址: git@github.com:Noodlescn/microservicecloud-config.git
// 本地硬盤目錄上,新建Git倉庫,並clone
git clone git@github.com:Noodlescn/microservicecloud-config.git

// 本地Git倉庫,microservicecloud-config 新建 application.yml
spring:
    profiles:
        active:
        - dev
---
spring:
    profiles: dev       # 開發環境
    application:
        name: microservicecloud-config-noodles-dev
---
spring:
    profiles: test      # 測試環境
    application:
        name: microservicecloud-config-noodles-test

# 文件保存為 UTF-8 格式


// 將application.yml推送到github上

新建 microservicecloud-config-3344(Cloud的配置中心模塊)

// pom.xml
<!-- springCloud Config -->
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<!-- 避免Config的Git插件報錯 -->
<dependency>
	<groupId>org.eclipse.jgit</groupId>
	<artifactId>org.eclipse.jgit</artifactId>
	<version>4.10.0.201712302008-r</version>
</dependency>


// application.yml
server:
  port: 3344

spring:
  application:
    name: microservicecloud-config
  cloud:
    config:
      server:
        git:
          uri: git@github.com:Noodlescn/microservicecloud-config.git # GitHub上面的git倉庫名字


// 主啟動類
@SpringBootApplication
@EnableConfigServer
public class Config_3344_StartSpringCloudApp {

	public static void main(String[] args) {
		SpringApplication.run(Config_3344_StartSpringCloudApp.class, args);
	}

}


// 修改hosts文件,增加映射
// 127.0.0.1      config-3344.com


// 測試啟動微服務 3344
// http://config-3344.com:3344/application-dev.yml
// http://config-3344.com:3344/application-test.yml

1.2 SpringCloud Config客戶端配置

GitHub 准備工作

// 本地 microservicecloud-config 路徑下新建文件 microservicecloud-config-client.yml
spring:
    profiles:
        active
        - dev

---
server:
  port: 8201
spring:
  profiles: dev
  application:
    name: microservicecloud-config-client
eureka:
  client:
    service-url:
      defaultZone: http://eureka-dev.com:7001/eureka/
---
server:
  port: 8202
spring:
  profiles: test
  application:
    name: microservicecloud-config-client
eureka:
  client:
    service-url:
      defaultZone: http://eureka-test.com:7001/eureka/


// 提交到GitHub

新建 microservicecloud-config-client-3355

// pom.xml
<!-- springCloud Config 客戶端-->
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-config</artifactId>
</dependency>


// bootstrap.yml(是系統級配置文件,優先級最高)
spring:
  cloud:
    config:
      name: microservicecloud-config-client # 需要從github上讀取的資源名稱,注意沒有yml后綴名
      profile: dev  # 本次訪問的配置項
      label: master
      uri: http://config-3344.com:3344  
      # 本微服務啟動后,先去找3344號服務,通過SpringCloudConfig獲取GitHub的服務地址


// application.yml(是用戶級的資源配置項)
spring:
  application:
    name: microservicecloud-config-client


// 修改hosts文件: 127.0.0.1  client-config.com

// 新建rest類,驗證是否能從GitHub上讀取配置
@RestController
public class ConfigClientRest {

	@Value("${spring.application.name}$")
	private String applicationName;

	@Value("${eureka.client.service-url.defaultZone}$")
	private String eurekaServers;

	@Value("${server.port}$")
	private String port;

	@RequestMapping("/config")
	private String getConfig() {
		String str = "applicationName:"+applicationName+"\t eurekaServers:"+eurekaServers+"\t port:"+port;
		System.out.println("********str:" + str);
		return str;
	}
}


// 主啟動類ConfigClient_3355_StartSpringCloudApp
@SpringBootApplication
public class ConfigClient_3355_StartSpringCloudApp {

	public static void main(String[] args) {
		SpringApplication.run(ConfigClient_3355_StartSpringCloudApp.class, args);
	}

}


// 測試訪問:
// http://client-config.com:8201/config

2. SpringCloud Config 配置實戰

GitHub 准備工作

// 本地microservicecloud-config 下新建:
// microservicecloud-config-eureka-client.yml
spring:
  profiles:
    active:
    - dev
---
server:
  port: 7001

spring:
  profiles: dev
  application:
    name: microservicecloud-config-eureka-client

eureka:
  instance:
    hostname: eureka7001.com
  client:
    register-with-eureka: false  # 當前的eureka-server自己不注冊進服務列表中
    fetch-registry: false  # 不通過eureka獲取注冊信息
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/
---
server:
  port: 7001    # 注冊中心占用7001端口

spring:
  profiles: test
  application:
    name: microservicecloud-config-eureka-client

eureka:
  instance:
    hostname: eureka7001.com
  client:
    register-with-eureka: false  # 當前的eureka-server自己不注冊進服務列表中
    fetch-registry: false  # 不通過eureka獲取注冊信息
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/


// 本地microservicecloud-config 下新建:
// microservicecloud-config-dept-client.yml
spring:
  profiles:
    active:
    - dev
---
server:
  port: 8001
spring:
  profiles: dev
  application:
    name: microservicecloud-config-dept-client
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: org.gjt.mm.mysql.Driver
    url: jdbc:mysql://localhost:3306/cloudDB01
    username: root
    password: root
    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.noodles.springcloud.entities
    mapper-locations:
    - classpath:mybatis/mapper/**/*.xml

eureka:
  client:  # 客戶端注冊進eureka服務列表內
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka
  instance:
    instance-id: dept-8001.com
    prefer-ip-address: true

info:
  app.name: noodles-microservicecloud-springcloudconfig01
  company.name: www.google.com
  build.artifactId: $project.artifactId$
  build.version: $project.version$
---
server:
  port: 8001
spring:
  profiles: test
  application:
    name: microservicecloud-config-dept-client
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: org.gjt.mm.mysql.Driver
    url: jdbc:mysql://localhost:3306/cloudDB02
    username: root
    password: root
    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.noodles.springcloud.entities
    mapper-locations:
    - classpath:mybatis/mapper/**/*.xml

eureka:
  client:  # 客戶端注冊進eureka服務列表內
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka
  instance:
    instance-id: dept-8001.com
    prefer-ip-address: true

info:
  app.name: noodles-microservicecloud-springcloudconfig02
  company.name: www.google.com
  build.artifactId: $project.artifactId$
  build.version: $project.version$


// 上傳GitHub

新建 microservicecloud-config-eureka-client-7001 工程 (Config版的eureka服務端)

// pom.xml(參照microservicecloud-eureka-7001)
<!-- springCloud Config -->
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-config</artifactId>
</dependency>


// bootstrap.yml
spring:
  cloud:
    config:
      name: microservicecloud-config-eureka-client  # 需要從GitHub上讀取的資源名稱,沒有yml后綴名
      profile: dev
      label: master
      uri: http://config-3344.com:3344    # SpringCloudConfig 獲取的服務地址


// application.yml
spring:
  application:
    name: microservicecloud-config-eureka-client


// 主啟動類
@SpringBootApplication
@EnableEurekaServer  // EurekaServer 服務器端啟動類,接收其他微服務注冊進來
public class Config_Git_EurekaServerApplication {

	public static void main(String[] args) {
		SpringApplication.run(Config_Git_EurekaServerApplication.class, args);
	}
}

//測試
// 啟動 microservicecloud-config-3344
// 啟動 microservicecloud-config-eureka-client-7001
// 訪問 http://eureka7001.com:7001/

新建 microservicecloud-config-dept-client-8001(Config版的dept微服務)

// pom.xml(參照8001)
<!-- SpringCloud 配置 -->
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-config</artifactId>
</dependency>


// bootstrap.yml
spring:
  cloud:
    config:
      name: microservicecloud-config-dept-client  # 需要從GitHub上讀取的資源名稱
      # profile 配置什么就讀取什么,配置 dev 或 test
      profile: test
      label: master
      uri: http://config-3344.com:3344  # SpringCloudConfig 獲取的服務地址


// application.yml
spring:
  application:
    name: microservicecloud-config-dept-client


// 主啟動類
@SpringBootApplication
@EnableEurekaClient	// 本服務啟動后,自動注冊進eureka服務中
@EnableDiscoveryClient // 服務發現
public class DeptProvider8001_App {

	public static void main(String[] args) {
		SpringApplication.run(DeptProvider8001_App.class, args);
	}
}


// 測試
// 默認訪問 test 配置: http://localhost:8001/dept/list
// 更換 dev 配置: http://localhost:8001/dept/list

參考資料:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM