SpringCloud Bus 消息总线
2018-09-01 本文已影响134人
BzCoder
上一篇文章我们介绍了配置中心,但是现在更新配置还是要重启啊!?所以我们本章就来介绍一个不重启的方法。
相关资料以及注意事项:
- 工程GitHub
- Config远程仓库地址
- 需要配置Eureka注册中心,方法见SpringBoot-Eureka的配置
- 需要配置本地RabbitMQ环境,方法见SpringBoot - 消息队列RabbitMQ安装测试
- SpringCloud Config 配置中心
- 环境:SpringBoot 2.0.4.RELEASE + SpringCloud Finchley.SR1
服务端
1.引入MAVEN
相比上一篇文章,新添加以下两个
- 添加
spring-cloud-starter-bus-amqp
,这是消息队列,用于通知更新配置 - 添加
spring-cloud-config-monitor
,暴露Moniror端口,用于WebHook,但存在BUG,本文章暂不介绍配合WebHook使用
2.配置文件
配置文件配置了RabbitMQ的地址以及暴露刷新配置接口地址
spring:
application:
name: config
cloud:
config:
server:
git:
uri: https://github.com/BzCoder/config-repo
username:
password:
basedir: D:/Config/basedir
rabbitmq:
host: 192.168.15.128
username: guest
password: guest
port: 5672
eureka:
instance:
prefer-ip-address: true
client:
service-url:
defaultZone: http://localhost:8762/eureka/
# 开放 bus-refresh 接口,以便配合 bus 实现 配置的动态刷新
management:
endpoints:
web:
exposure:
include: '*'
服务端配置完毕
客户端
1.引入MAVEN
相比上一篇文章,新添加以下一个
- 添加
spring-cloud-starter-bus-amqp
,这是消息队列,用于通知更新交互
2.代码修改
在你需要刷新的作用域上添加@RefreshScope,这样随着配置刷新,参数就会刷新
@RestController
@RefreshScope
public class ConfigController {
@Value("${env}")
private String env;
@GetMapping("/env")
public String getEnv()
{
return env;
}
}
这样客户端也配置完毕了。
3.实践操作
如果在RabbitMQ的管理界面中会出现两个新的队列,那么恭喜你,已经成功了一半了。
接下来在修改远程仓库的数据后向ConfigServer端口:
http://localhost:8080/actuator/bus-refresh
,如何返回状态为200,就表示你已经刷新配置。
成功
在我们的Client端可以看到配置更新的Log,这样就代表你成功了。
那么有关于SpringCloudBus就介绍到这里了,有关于利用Webhook自动刷新配置,要等待Spring官方进行修复。等以后来填坑。