上次我们说到分布式配置中心(上一篇),能通过gitee集中管理文件。
问题描述:那当我们修改了gitee仓库的文件,那配置中心能及时的更新数据吗?
准备工作:
之前我们在user-dev配置文件中有test.name属性和值java,之后修改并在控制台打印这个值来测试是否能及时更新。
测试操作:
先在user-service(服务提供者)的Controller类中加上name属性:
@RestController
public class UserController{
@Resource
private UserService service;
@Value("${test.name}")
private String name;
@GetMapping("/user/{id}")
public User XXX(@PathVariable("id")Long id){
//在控制台输出test.name属性的值,看是否更新成功
System.out.println("配置文件中的test.name:"+ name);
return service.XXX(id);
}
}
测试结果:
挨个开启Eureka、配置中心和服务提供者。
当发送请求并正常响应时:
然后服务提供者、注册中心和配置中心的启动类不关闭,在仓库修改test.name的值为minbo1。然后刷新页面,发现test.name的值没有更新。当我们rerun服务提供者时,发现值更新了。
这就衍生出另一个问题。当一个服务有多个实例,也就是集群的时候,岂不是一个一个重启才能更新到值?!显然是不合理的。
这就需要用到消息总线。
过程简述:微服务对消息队列进行监听,当接到消息队列的消息后,重新从配置中心获取配置信息,实现更新。