个人博客:兰陵笑笑生,欢迎浏览博客!java
上一章 SpringCloud基础教程(四)-配置中心入门当中,咱们在对Eureka的有了基本的基础认识之上,深刻的了解Eureka高可用集群和其余的生产环境中用到的一些配置。本章将开始了解分布式环境下的配置中心。git
在实际的项目运行中,咱们会根据实际需求修改配置内容,那么有没有一种方式,可以在不启动服务组件的状况向让配置文件动态的生效呢,Spring Cloud Conifg中提供了一种方式了。固然咱们还须要考虑一旦配置服务宕机的话,那么配置客户端是没法获取到配置信息的,因此针对配置服务,咱们也但愿能提供高可用的服务。程序员
首先咱们在客户端(每一个开发的微服务)的控制器上添加 @RefreshScope 注解,并在客户端(项目的pom.xml中引入actuator依赖(actuator中包含了/actuator/refresh的api):web
@RefreshScope @RestController public class ValueController { @Value("${k1}") String value; @GetMapping("/get") public String getValue(){ return value; } }
亲自测试,若是将@RefreshScope注解添加在启动类上,value是无论用的,只有添加在须要热加载的Bean上才生效。spring
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
修改bootstrap.xml 添加以下配置,表示能够经过手动的刷新改变获取配置信息bootstrap
management: endpoints: enabled-by-default: true web: exposure: include: refresh
在配置完成以后,咱们经过如下的步骤测试热生效:api
步骤一:启动Config Server和Config Client项目访问。安全
步骤二:访问http://localhost:9003/get 返回的结果是 “master-test-v1 ”;架构
步骤三:修改配置文件ConfigServer-test.properties 内容修改为”k1=master-test-v2“;提交到git仓库app
步骤四:访问http://localhost:9003/get 返回的结果依旧是 “master-test-v1 ”;
步骤五:经过POST访问http://localhost:g003/actuator/refresh 访问获得响应【“k1”】,注意这里的版本是2.x系列的springCloud,和1.X系列的接口访问不同):
第六步:再次去访问http://localhost:9003/get 返回的结果变成了是 “master-test-v2 ”;
经过以上的配置,咱们成功的测试了手动的请求能够刷新并动态的加载最新的配置,固然这样仍是存在一个缺点,就是须要手动刷新。固然SpringCloud中介绍了使用Bus来通知Spring Cloud Config,后期的文章还需继续生如介绍。
在上文中,咱们的配置的客户端都是经过制定配置Config Server的实例地址方式获取配置信息的,一旦Config Server遇到故障,获取配置信息就会出现故障,SpringCloud一样支持经过高可用的方式解决这样的问题。接下来咱们结合Eureka组件,来搭建高可用的配置中心。
在Config Server的项目中添加Eureka的依赖:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
并在ConfigServerApplicaition.Java启动类添加注解@EnableEurekaClient 开启Eureka注册:
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 @EnableConfigServer @EnableEurekaClient public class ConfigServerApplicaition { public static void main(String[] args) { SpringApplication.run(ConfigServerApplicaition.class, args); } }
修改Config Server的applicaiton.xml配置:修改端口号和实例Id,启动2个Config Server实例:
server: port: 6001 #服务提供方 spring: application: #服务的名称 name: server-config-cluster cloud: config: server: git: uri: https://gitee.com/lnxxs/springCloudConfig.git password: username: #git非植 label: master uri: http://localhost:6001/ enabled: true #http安全 security: user: name: user password: pwd #注册的实实例 eureka: instance: instance-id: config-server1 client: service-url: #链接eureka的url defaultZone: http://eureka7001.com:7001/eureka/
在Eureka的监控中心,咱们看到了名称为server-config-cluster的实例有2个,分别是config-server1和
config-server2:
客户端须要从Eureka获取Config Server的地址,首先在客户端的项目pom.xml中添加Eureka的依赖:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
启动类添加@EnableDiscoveryClient注解,启动开发服务发现的功能,发现Config Server配置服务信息:
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication @EnableAutoConfiguration @EnableDiscoveryClient public class ConfigClientApplication { public static void main(String[] args) { SpringApplication.run(ConfigClientApplication.class, args); } }
同时在bootstrap.xml洗澡呢Eureka注册中心的地址配置,同时将spring.cloud.config.uri去掉,打开spring.cloud.config.discover.enabled=ture ,并添加spring.cloud.config.service-id为配置服务的spring.application.name= server-config-cluster,具体配置以下:
spring: application: name: server-client cloud: config: label: master profile: test #修改uri为 discovery.service-id #uri: http://localhost:6001/ name: ConfigServer fail-fast: true retry: initial-interval: 1000 max-attempts: 6 max-interval: 2000 multiplier: 1.1 username: user password: pwd discovery: service-id: server-config-cluster enabled: true management: endpoints: enabled-by-default: true web: exposure: include: refresh eureka: instance: instance-id: config-client client: service-url: #链接eureka的url defaultZone: http://eureka7001.com:7001/eureka/
经过以上的配置,就能够实现配置中心的高可用。
本章是对配置中心作了深刻的介绍,包括配置的热加载和配置服务的高可用,这些都是微服务架构所须要的。Spring Cloud Config功能特别的丰富,不止于此,同时还支持更换git仓库为SVN或者其余的仓库等,有感兴趣的同窗能够自行研究。
.以就是本期的分享,你还能够关注公众号: 程序员笑笑生,关注更多精彩内容!
SpringCloud基础教程(一)-微服务与SpringCloud
SpringCloud基础教程(二)-服务发现 Eureka
SpringCloud基础教程(五)-配置中心热生效和高可用
SpringCloud 基础教程(六)-负载均衡Ribbon
更多精彩内容,请期待...
本文由博客一文多发平台 OpenWrite 发布!
个人博客地址兰陵笑笑生,欢迎浏览!