SpringCloudBus

时间:2021-12-25 03:00:55

1 消息总线组件SpringCloudBus

1.1 SpringCloudBus简介

? 如果我们更新码云中的配置文件,那客户端工程是否可以及时接受新的配置信息呢?我们现在来做有一个测试,修改一下码云中的配置文件中mysql的端口 ,然后测试http://localhost:9001/label 数据依然可以查询出来,证明修改服务器中的配置并没有更新立刻到工程,只有重新启动程序才会读取配置。 那我们如果想在不重启微服务的情况下更新配置如何来实现呢? 我们使用SpringCloudBus来实现配置的自动更新。

1.2 代码实现

1.2.1 配置服务端

(1)修改tensquare_config工程的pom.xml,引用依赖

        <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>

(2)修改application.yml ,添加配置


rabbitmq:
  host: 192.168.184.135
management: #暴露触发消息总线的地址
endpoints:
  web:
    exposure:
      include: bus-refresh

1.2.2 配置客户端

我们还是以基础模块为例,加入消息总线

(1)修改tensquare_base工程 ,引入依赖


 <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>

(2)在码云的配置文件中配置rabbitMQ的地址:


rabbitmq:
  host: 192.168.184.135

(2)启动tensquare_eureka 、tensquare_config和tensquare_base 看是否正常运行

(3)修改码云上的配置文件 ,将数据库连接IP 改为127.0.0.1 ,在本地部署一份数据库。

(4)postman测试 Url: http://127.0.0.1:12000/actuator/bus-refresh Method: post

(5)再次观察输出的数据是否是读取了本地的mysql数据。

1.2.3 自定义配置的读取

(1)修改码云上的配置文件,增加自定义配置


sms:
ip: 127.0.0.1

(2)在tensquare_base工程中新建controller

?
@RestController
public class TestController {
   @Value("${sms.ip}")
   private String ip;
?
   @RequestMapping(value = "/ip", method = RequestMethod.GET)
   public String ip() {
       return ip;
  }
}

(3)运行测试看是否能够读取配置信息 ,OK.

(4)修改码云上的配置文件中的自定义配置


sms:
ip: 192.168.184.134

(5)通过postman测试 Url: http://127.0.0.1:12000/actuator/bus-refresh Method: post

测试后观察,发现并没有更新信息。

这是因为我们的 controller少了一个注解@RefreshScope 此注解用于刷新配置


@RefreshScope
@RestController
public class TestController {
   @Value("${sms.ip}")
   private String ip;
?
   @RequestMapping(value = "/ip", method = RequestMethod.GET)
   public String ip() {
       return ip;
  }
}

添加后再次进行测试。

相关文章