SpringCloud极简入门(十三)SpringCloud B
本文作者:陈刚,叩丁狼高级讲师。原创文章,转载请注明出处。
一.什么是消息总线
在微服务架构中,为了更方便的向微服务实例广播消息,我们通常会构建一个消息中心,让所有的服务实例都连接上来,而该消息中心所发布的消息都会被微服务实例监听和消费,我们把这种机制叫做消息总线(SpringCloud Bus),在总线上的每个服务实例都可以去广播一些让其他服务知道的消息,消息总线可以为微服务做监控,或实现应用之间的通信,和其他的一些管理工作,SpringCloud Bus可选的消息组件包括RabbitMQ,Kafka等,本章节讲述使用 RabbitMQ 作为Spring Cloud的消息组件实现刷新更改微服务的配置文件。
二.为什么要用SpringCloud Bus刷新配置
例如有成十上百个微服务实例,当更改配置时,需要重启多个微服务实例,会非常麻烦。SpringCloud Bus 就能让这个过程变得非常简单,当我们Git仓库中的配置更改不后,只需要某个微服务实例发送一个POST请求,通过消息组件通知其他微服务实例重新获取配置文件,以达到配置的自动刷新效果。实现原理如下:
image.png
三.实现配置刷新
1.本章节基于第十章“配置中心”的基础上进行修改,给 config-client应用添加SpringCloud Bus相关依赖 spring-cloud-starter-bus-amqp和 spring-boot-starter-actuator
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
>2.搭建RabbitMQ服务,不会使用 RabbitMQ 的同学请先百度一下,RabbitMQ使用非常简单(体现你们自学能力的时候到了)
>3.修改配置文件 bootstrap.properties,增加RabbitMQ连接配置
分支
spring.cloud.config.label=master
dev开发环境配置文件 dev开发环境配置文件 ,test测试环境,pro正式环境
spring.cloud.config.profile=dev
spring.cloud.config.name=config-client
配置服务地址
spring.cloud.config.uri=http://localhost:5555/
增加 rabbitmq相关配置
spring.rabbitmq.host=localhost #mq连接地址
spring.rabbitmq.port=5672 #mq端口
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.cloud.bus.enabled=true #开启 bus
spring.cloud.bus.trace.enabled=true
management.endpoints.web.exposure.include=bus-refresh #暴露刷新地址,完整访问路径: xxx/actuator/bus-refresh
>4.在要属性的配置的配置类上打上 标签@RefreshScope,否则不能自动刷新
@RestController
@RefreshScope
public class HelloController {
@Value("${notify}") //从远程配置中取值
private String notify;
@RequestMapping("/hello")
public String hello(){
return notify;
}
}
> 5.启动 config-server ,再启动 config-client ,你可以从控制台看到
> ![image.png](https://img.haomeiwen.com/i807144/c7d3006141594a5c?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
>
> 说明RabbitMQ配置起效了访问 config-client :[http://localhost:7777/hello](http://localhost:7777/hello) ,可以看到响应内容为 “You are successful for dev” ,接下来修改 Git中的配置 config-client-dev.properties中的 notify为 :
> ![image.png](https://img.haomeiwen.com/i807144/82b6216f3506f7c9?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
>
> 6.请求配置刷新地址,使用post请求 :[http://localhost:7777/actuator/bus-refresh](http://localhost:7777/actuator/bus-refresh) ,如我这里使用了postman进行测试:![image.png](https://img.haomeiwen.com/i807144/1dc42d31619e0794?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
>
> ,观察控制台会出现变化,![image.png](https://img.haomeiwen.com/i807144/768452955f960ef0?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
>
> 说明刷新的新的配置
> 再次访问[http://localhost:7777/hello你可以看到](http://localhost:7777/hello%E4%BD%A0%E5%8F%AF%E4%BB%A5%E7%9C%8B%E5%88%B0)
> “You are successful for dev hai bus test” ,已经发生变化,说明我们从 git中获取的配置属性值已经被刷新
![叩丁狼教育.jpg](https://img.haomeiwen.com/i807144/e84c35cf93995ff0.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)