一、快速入门
当我们在配置中心,修改服务的配置,或者新增服务的配置,我们都要重启相应的服务。有什么方法可以不重启呢?
二、基于spring-boot-starter-actuator实现手动刷新
1.在服务(我这里是user-service)中导入pom
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2.配置文件中开放端点
# 开放端点 refresh主动刷新
management.endpoints.web.exposure.include= refresh
3.放问http地址
当我们修改了git上的配置,访问需要刷新配置的服务。http://ip:端口/actuator/refresh
问题:
当我们修改了服务比较多是,我们需要逐个访问每个服务,还是比较麻烦
二、基于spring-cloud-starter-bus-amqp实现手动刷新
1.config服务中添加pom
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-monitor</artifactId>
</dependency>
2.config服务中添加配置
application.properties
# 开启bus 总线功能
spring.cloud.bus.enabled=true
# 开启刷新功能
spring.cloud.bus.refresh.enabled=true
# 链路开启
spring.cloud.bus.trace.enabled=true
# 开启端点
management.endpoints.web.exposure.include=bus-refresh
bus支持kafka和rabbitmq,我们导入的amqp所以用到的rabbitmq,配置rabbitmq等信息
spring.rabbitmq.addresses=localhost:5672
spring.rabbitmq.virtual-host=/
spring.rabbitmq.password=guest
spring.rabbitmq.username=guest
3.服务(user-service)中添加pom
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
4.服务(user-service)中添加配置
spring.rabbitmq.addresses=localhost:5672
spring.rabbitmq.virtual-host=/
spring.rabbitmq.password=guest
spring.rabbitmq.username=guest
如果配置文件改变,用postman等工具访问http://config服务的ip地址端口:/monitor?path=* (不行用post请求),path后面的是服务名称, *代表的是所有服务。
二、基于webhooks实现自动刷新
虽然前面访问一个地址就能完成刷新,但是可以想想怎么省去我们访问地址的步骤呢?
在git上有个webhooks
我们在这里配置刷新的地址,当我们这个项目里面的配置文件发生改变时,会调用这个接口,我们可以利用它来完成自动刷新。
注意:
因为githup在外网上,我们这里需要配置线上的域名。我们在测试的时候可以利用natapps等穿透工具将config的内网ip暴露出去完成测试。