Spring Cloud Config 配置中心高可用集成 时间: 2018-10-15 18:11 分类: JAVA Web,Spring,JAVA ####简介 `Spring Cloud Config`配置中心可以用来统一管理各个服务的配置文件,这是废话。。 `Spring Cloud Config`配置中心支持与`Eureka`无缝集成构建高可用的项目,与单个配置中心相比就是高可用、容错性好: ![微信截图_20181015172539.png][1] `Spring Cloud Config`支持本地读取配置文件,也支持`git`或者`svn`读取,在这里为了方便将直接使用从本地读取配置文件。 ####实践 首先,整个 Demo 分为三个模块: - Eureka Server (服务发现与注册) - Config Server (配置中心服务端,可进行高可用集群多部署) - Config Client (配置客户端) 项目结构如下: ![微信截图_20181015173226.png][2] 理清三者的关系后就非常进行集成了: ![微信截图_20181015181341.png][3] 整个项目采用 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`注解: ```java @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`配置本地配置文件存放路径,用来存放其他服务的配置文件,同时支持`yml`与`properties`格式文件,文件命名规则:${spring.application.name}-${spring.profiles.active},注意中间的减号,这两个变量即`Client Server`的`application.properties`中配置的值。 最后给`Config Server`的启动类添加相关注解开启服务注册与发现以及设置为一个`配置中心服务`: ```java @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`启动类: ```java @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`的值,`test`在`Config Server`模块`classpath`下`config`文件夹中的`config-client-dev.properties`中配置,我这里配置的是`test=hello world`。 到此,整个项目集成完毕,依次启动`Eureka Server`->`Config Server`->`Config Client`,打开`http://localhost:8761/`查看下关服务注册发现情况: ![Eureka.png][4] 浏览器访问`http://localhost:8002/hello`,看到输出`hello world`表示读取配置中心配置文件成功。 [1]: https://0o0.me/usr/uploads/2018/10/3988180405.png [2]: https://0o0.me/usr/uploads/2018/10/3461093621.png [3]: https://0o0.me/usr/uploads/2018/10/3657295620.png [4]: https://0o0.me/usr/uploads/2018/10/3114677276.png 标签: Spring Cloud 微服务