前言
在使用了配置中心之后,会出现在这种要求:即开发人员想在配置文件中添加一些自定义的东西,配置文件都在云端,肯定好改,但是在修改之后怎么办?重启微服务?但是在这时候有用户在使用这个服务,重启微服务工程中就会出现用户的数据丢失,用户的体验极差。会遭到用户的投诉。这该怎么办呢?bus就是为了解决这个问题的。它可以用消息队列的发布订阅模型,让所有为服务来订阅这个事件,当这个事件发生改变了,就可以通知所有微服务去更新它们的内存中的配置信息。这时你只需要在springcloud Config Server端发出refresh,就可以触发所有微服务更新了。
开搞
1.使用之前创建的config微服务
2.添加依赖
<!--bus监听rabbitMq-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-bus</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-rabbit</artifactId>
</dependency>
3.添加yml的内容
spring:
rabbitmq:
addresses: localhost
management: #暴露触发消息总线的地址
endpoints:
web:
exposure:
include: bus-refresh
4.被代理的微服务端添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-bus</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-rabbit</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
5.在云端添加监听消息队列的配置
spring:
rabbitmq:
host: localhost
6.在云端的配置文件中添加自定义的东西,例如
ip:
127.0.0.1吃的吃大餐
7.在微服务的controller
中使用@Value("${ip}")
,获取云端的自定义配置,并在某一个方法中输出进行查看
8.使用postman发送http://127.0.0.1:config的端口/actuator/bus-refresh
,并且开始进行端口的访问
9.发现想要的自定义配置并没有输出出来,是因为在那个ciontroller
上少个@RefreshScope
@RefreshScope
@RestController
@RequestMapping("test")
public class ConsumeController {
@Autowired
private RestTemplate restTemplate;
@Value("${ip}")
private String ip;
@GetMapping("/showInfo")
public String showInfo() {
System.out.println(ip);
return restTemplate.getForObject("http://client/home", String.class);//获取某一个客户端的那个方法
}
}
10.添加之后重启微服务,并且在冲完气之后修改云端的自定义配置,重新访问
云端的 访问的
网友评论