Spring Cloud Netflix 分布式配置中心(八)
概述 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。在 Spring Cloud 中,有分布式配置中心组件 Spring Cloud Config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程 Git 仓库中。在 Spring Cloud Config 组件中,分两个角色,一是 Config Server,二是 Config Client。
以下以网关为例,开始演示Config Server和Config Client的配置。
Config Server 创建工程
pom依赖 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 <?xml version="1.0" encoding="UTF-8" ?> <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 https://maven.apache.org/xsd/maven-4.0.0.xsd" > <modelVersion > 4.0.0</modelVersion > <parent > <groupId > org.springframework.boot</groupId > <artifactId > spring-boot-starter-parent</artifactId > <version > 2.2.2.RELEASE</version > <relativePath /> </parent > <groupId > com.xzt</groupId > <artifactId > cloud-config-service</artifactId > <version > 0.0.1-SNAPSHOT</version > <name > cloud-config-service</name > <description > Demo project for Spring Boot</description > <properties > <java.version > 1.8</java.version > <spring-cloud.version > Hoxton.SR1</spring-cloud.version > </properties > <dependencies > <dependency > <groupId > org.springframework.cloud</groupId > <artifactId > spring-cloud-config-server</artifactId > </dependency > <dependency > <groupId > org.springframework.cloud</groupId > <artifactId > spring-cloud-starter-netflix-eureka-server</artifactId > </dependency > <dependency > <groupId > org.springframework.boot</groupId > <artifactId > spring-boot-starter-test</artifactId > <scope > test</scope > <exclusions > <exclusion > <groupId > org.junit.vintage</groupId > <artifactId > junit-vintage-engine</artifactId > </exclusion > </exclusions > </dependency > </dependencies > <dependencyManagement > <dependencies > <dependency > <groupId > org.springframework.cloud</groupId > <artifactId > spring-cloud-dependencies</artifactId > <version > ${spring-cloud.version}</version > <type > pom</type > <scope > import</scope > </dependency > </dependencies > </dependencyManagement > <build > <plugins > <plugin > <groupId > org.springframework.boot</groupId > <artifactId > spring-boot-maven-plugin</artifactId > </plugin > </plugins > </build > </project >
启动类 通过 @EnableConfigServer
注解,开启配置服务器功能
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 package com.xzt.config;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.config.server.EnableConfigServer;import org.springframework.cloud.netflix.eureka.EnableEurekaClient;@SpringBootApplication @EnableEurekaClient @EnableConfigServer public class CloudConfigServiceApplication { public static void main (String[] args) { SpringApplication.run(CloudConfigServiceApplication.class, args); } }
application.yml 这里使用git仓库的方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 spring: application: name: cloud-config-service cloud: config: label: master server: git: uri: https://github.com/intxzt/spring-cloud-netflix-config.git search-paths: repo username: password: server: port: 8888 eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/
相关配置说明,如下:
spring.cloud.config.label
:配置仓库的分支
spring.cloud.config.server.git.uri
:配置 Git 仓库地址(GitHub、GitLab、码云 …)
spring.cloud.config.server.git.search-paths
:配置仓库路径(存放配置文件的目录)
spring.cloud.config.server.git.username
:访问 Git 仓库的账号
spring.cloud.config.server.git.password
:访问 Git 仓库的密码
测试 浏览器访问http://localhost:8888/admin-config/dev/master
显示如下内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 { "name" : "admin-config" , "profiles" : [ "dev" ] , "label" : "master" , "version" : "96c75fddffe2f06cbd478ce73bb089e33690b630" , "state" : null , "propertySources" : [ { "name" : "https://github.com/intxzt/spring-cloud-netflix-config.git/repo/admin-config-dev.yml" , "source" : { "spring.application.name" : "cloud-admin-service" , "server.port" : 8762 } } ] }
Config Client 增加pom依赖 1 2 3 4 <dependency > <groupId > org.springframework.cloud</groupId > <artifactId > spring-cloud-starter-config</artifactId > </dependency >
删除application.yml 新增bootatrap.yml 为了使用Config Server中配置启动网关,需要使用加载顺序更加靠前的bootatrap.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 spring: cloud: config: discovery: enabled: true service-id: cloud-config-service name: zuul-config label: master profile: dev eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/
相关配置说明,如下:
spring.cloud.config.discovery.enable
:指示已启用配置服务器发现的标志(将通过发现查找配置服务器URL)
spring.cloud.config.discovery.service-id
:eureka中配置中心的id
spring.cloud.config.uri
:配置服务中心的网址
spring.cloud.config.name
:配置文件名称的前缀
spring.cloud.config.label
:配置仓库的分支
spring.cloud.config.profile
:配置文件的环境标识
dev:表示开发环境
注意事项:
配置服务器的默认端口为 8888
,如果修改了默认端口,则客户端项目就不能在 application.yml
或 application.properties
中配置 spring.cloud.config.uri
,必须在 bootstrap.yml
或是 bootstrap.properties
中配置,原因是 bootstrap
开头的配置文件会被优先加载和配置,切记。
这里使用eureka服务发现配置中心。所以并未指定url。
如果Config Server是本地模式,可不用指定label,规则如下:
对于zuul-config-dev.yml
,需要配置spring.cloud.config.name=zuul-config
和spring.cloud.config.profile=dev
git仓库 zuul-config-dev.yml 1 2 3 4 5 6 7 8 9 10 11 12 spring: application: name: spring-cloud-zuul server: port: 8769 zuul: routes: api-1: path: /admin/** serviceId: cloud-admin-service
测试 依次启动注册中心、配置中心、和网关,访问http://localhost:8769/admin/hi?message=HelloRibbon
,出现以下内容
1 { "message" : "无法连接,请检查您的网络" , "status" : 200 }