在上篇中介绍了SpringCloud Config的使用,本篇则介绍基于SpringCloud(基于SpringBoot2.x,.SpringCloud Finchley版)中的分布式配置中心(SpringCloud Config)的配置刷新和消息总线(RabbitMQ和Kafka)使用教程。
SpringCloud Config Refresh在上一篇中我们介绍了springcloud配置中心的本地使用和Git使用的用法,但是当重新修改配置文件提交后,客户端获取的仍然是修改前的信息,需要客户端重启才可以获取最新的信息。因此我们需要客户端能够动态进行更新,幸好springcloud官方已经给出方案,所以我们只需要使用就行了。
开发准备开发环境
JDK:1.8
SpringBoot:2.0.6.RELEASE
SpringCloud:Finchley.SR2
注:不一定非要用上述的版本,可以根据情况进行相应的调整。需要注意的是SpringBoot2.x以后,jdk的版本必须是1.8以上!
确认了开发环境之后,我们再来添加相关的pom依赖。
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies> 服务端服务端以及注册中心这块配置和代码和之前springcloud-config配置基本一样即可。注册中心新项目的的名称为springcloud-config-bus-eureka,服务端新项目的的名称为springcloud-config-bus-server。
注册中心pom配置、application.properties配置和代码如下:
pom:
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency>application.properties:
spring.application.name=springcloud-config-bus-eureka server.port=8006 eureka.client.register-with-eureka=false eureka.client.fetch-registry=false eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/代码:
@SpringBootApplication @EnableEurekaServer public class ConfigBusEurekaApplication { public static void main(String[] args) { SpringApplication.run(ConfigBusEurekaApplication.class, args); System.out.println("config bus 注册中心服务启动..."); } }服务端pom配置、application.properties配置和代码如下:
pom:
<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> </dependencies>application.properties:
spring.application.name=springcloud-config-server server.port=9005 eureka.client.serviceUrl.defaultZone=http://localhost:8005/eureka/ spring.cloud.config.server.git.uri = https://github.com/xuwujing/springcloud-study/ spring.cloud.config.server.git.search-paths = /springcloud-config/config-repo spring.cloud.config.server.git.username = spring.cloud.config.server.git.password =代码:
@EnableDiscoveryClient @EnableConfigServer @SpringBootApplication public class ConfigServerApplication { public static void main(String[] args) { SpringApplication.run(ConfigServerApplication.class, args); System.out.println("配置中心服务端启动成功!"); } } 客户端客户端这边在之前springcloud-config-client项目中进行改造,新项目的的名称为springcloud-config-bus-client,在pom文件中新增如下配置:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>spring-boot-starter-actuator表示对该程序进行监控,可以通过http接口得到该程序的各种信息,详细的使用可以查看我的这个项目springboot-actuator,可以在注释中查询各种接口的使用。
然后再到配置文件application.properties中添加如下配置:
management.endpoints.web.exposure.include=refresh该配置表示暴露刷新的地址为refresh。
注:如果是SpringBoot1.x的版本,那么配置改成management.security.enabled=false即可。
最后在客户端的Controller增加一个@RefreshScope注解,该注解表示在接到SpringCloud配置中心配置刷新的时候,自动将新的配置更新到该类对应的字段中。
@RestController @RefreshScope public class ClientController { @Value("${word}") private String word; @RequestMapping("/hello") public String index(@RequestParam String name) { return name+","+this.word; } } 测试