admin

Spring Cloud Config 配置中心高可用集成
简介Spring Cloud Config配置中心可以用来统一管理各个服务的配置文件,这是废话。。Spring C...
扫描右侧二维码阅读全文
15
2018/10

Spring Cloud Config 配置中心高可用集成

简介

Spring Cloud Config配置中心可以用来统一管理各个服务的配置文件,这是废话。。
Spring Cloud Config配置中心支持与Eureka无缝集成构建高可用的项目,与单个配置中心相比就是高可用、容错性好:
微信截图_20181015172539.png
Spring Cloud Config支持本地读取配置文件,也支持git或者svn读取,在这里为了方便将直接使用从本地读取配置文件。

实践

首先,整个 Demo 分为三个模块:

  • Eureka Server (服务发现与注册)
  • Config Server (配置中心服务端,可进行高可用集群多部署)
  • Config Client (配置客户端)
    项目结构如下:

微信截图_20181015173226.png
理清三者的关系后就非常进行集成了:
微信截图_20181015181341.png

整个项目采用 Maven 多模块方式构建,根据依赖关系,首先创建Eureka Server模块,构建,比较简单,添加相关的starter依赖,然后application.properties如下:

server.port=8761
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
#eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

上面的eureka.client.service-url.defaultZone属性默认值就是http://localhost:8761/eureka/,所以我们可以不写。
启动类添加@EnableEurekaServer注解:

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {

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

Eureka Server就搭建好了。

接下来构建Config Server,还是一样先添加相关依赖,再看application.properties与启动类添加注解,配置文件如下:

server.port=8001
spring.profiles.active=native
spring.cloud.config.server.native.search-locations=classpath:/config

spring.application.name=config-server

#eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

spring.profiles.active=native表示从本地读取配置文件。
spring.cloud.config.server.native.search-locations=classpath:/config配置本地配置文件存放路径,用来存放其他服务的配置文件,同时支持ymlproperties格式文件,文件命名规则:${spring.application.name}-${spring.profiles.active},注意中间的减号,这两个变量即Client Serverapplication.properties中配置的值。
最后给Config Server的启动类添加相关注解开启服务注册与发现以及设置为一个配置中心服务

@EnableEurekaClient
@EnableConfigServer
@SpringBootApplication
public class ConfigServerApplication {

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

最后构建Config Client客户端项目,与前面一样,主要就是添加相关依赖与application.properties配置相关组件,需要注意的是配置配置中心服务的时候不能在application.properties里面配置了,因为读取配置中心配置文件的时候是先于读取application.properties的,所以就会使用默认的8888端口去读,导致启动报错,在控制台看到Fetching config from server at: http://localhost:8888信息的朋友就是这个问题导致的。
解决办法就是讲配置写在bootstrap.properties文件中:

server.port=8002
spring.cloud.config.discovery.enabled=true
spring.cloud.config.fail-fast=true
#发现服务ID,填 Config Server 项目中的 spring.application.name 的值
spring.cloud.config.discovery.service-id=config-server

spring.profiles.active=dev

spring.application.name=config-client

Client Server启动类:

@EnableEurekaClient
@SpringBootApplication
@RestController
public class ConfigClientApplication {

    @Value("${test}")
    private String test;

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

    @GetMapping("/hello")
    public String hello() {
        return test;
    }
}

上面为了测试是否读取了配置中心的配置文件,所以读取了test的值,testConfig Server模块classpathconfig文件夹中的config-client-dev.properties中配置,我这里配置的是test=hello world
到此,整个项目集成完毕,依次启动Eureka Server->Config Server->Config Client,打开http://localhost:8761/查看下关服务注册发现情况:
Eureka.png
浏览器访问http://localhost:8002/hello,看到输出hello world表示读取配置中心配置文件成功。

Last modification:October 15th, 2018 at 06:14 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment