使用Spring Cloud Bus更新微服务配置
Spring Cloud Bus将分布式系统的节点与轻量级消息代理链接。这可以用于广播状态更改(例如配置更改)或其他管理指令。一个关键的想法是,Bus就像一个扩展的Spring Boot应用程序的分布式执行器,但也可以用作应用程序之间的通信渠道。当前唯一的实现是使用AMQP代理作为传输,但是相同的基本功能集(还有一些取决于传输)在其他传输的路线图上。
本文要讲述的是用Spring Cloud Bus实现微服务集群架构的配置文件的自动更新。
Spring Cloud Bus需要消息中间件支持,您需要将spring-cloud-starter-bus-amqp或spring-cloud-starter-bus-kafka添加到您的Maven依赖关系管理中,Spring Cloud负责其余部分。你只需要确保RabbitMQ或Kafka可用和配置,本例使用RabbitMQ。
第一步:
安装RabbitMQ并在配置到微服务中,通常你需要在微服务配置文件bootstrap.yml中添加消息中间件配置信息:
spring:
rabbitmq:
host: 172.108.12.103
port: 5672
username: system
password: sgwkd
第二步:
在微服务项目的pom.xml文件中添加Spring Cloud Bus依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
第三步:
在需要更新配置文件信息的class上使用注解@RefreshScope
@RefreshScope
@RequestMapping("/test")
public class TestController {
@Value("${test.defaultMsg}")
public String defaultMsg;
...
}
第四步:
通过微服务实例的POST 接口调用总线API,完成自动更新
例:POST: http://101.130.13.108:4000/bus/refresh (此方法只适用于相同服务器不同端口的微服务集群服务)
注:如果相同微服务的多个实例集群,使用的是相同的端口时,首先需要配置微服务索引号为不同的值spring.application.index 否则总线检测不到微服务的其他实例,以上配置都设定好了以后再通过微服务名更新微服务集群配置。
例:POST http://101.130.13.108:4000/bus/refresh?destination=order-service:**
order-service为微服务名,**表示忽略端口号。
Spring Cloud Bus更新微服务配置架构图:
--END