代码:https://gitee.com/GXQ205153964/config-parent_bus.git
简介:
- spring cloud bus 使用轻量级的消息中间件将分布式的节点连接起来,可以用于广播配置文件的更改或者服务的监控管理。关键的思想就是,消息总线可以为微服务做监控,也可以实现应用程序之间相互通信。
- spring cloud Bus 可选的消息组件包括 RabbitMQ和Kafka
- 经常和config一起使用,通过cmd curl发送完post请求后,只能一个客户端刷新得到最新配置文件,如果客户端多时,就很麻烦,bus可以解决这个问题,只需要发送一跳post请求,所有客户端都能通过刷新得到最新外部配置文件。
这里是承接Config 分布式配置中心文章,解决文章中遗留的发一次请求只能一个client更新的到最新的配置文件。
bus搭建
将config-consumer改造为client
config-provider的bootstrap.yml复制到config-consumer
#bootstrap优先级更高
#配置config-server地址
#配置获取配置文件的名称等信息
spring:
cloud:
config:
#配置config-server地址
#uri: http://localhost:9527
name: config #文件名
profile: dev #开发环境
label: master #分支
#从注册中心去寻找config-server地址
discovery:
enabled: true
service-id: CONFIG-SERVER
#暴露端点
management:
endpoints:
web:
exposure:
include: refresh # 或者 * 也可以代替,表示全部暴露不安全
OrderController注入
将获取到的外部配置文件输出到web
@RefreshScope
@Value("${gao}")
private String gao;
goods.setTitle(goods.getTitle()+"--"+gao);
导入pom.xml
<!--feign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- config client-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
运行:
编写bus
config-server
引入pom.xml
<!--bus-->
<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>
添加配置
server:
port: 9527
spring:
application:
name: config-server
cloud:
config:
server:
git:
uri: https://gitee.com/GXQ205153964/springcloud-configs.git #远程仓库的地址
label: master
#配置rabbitmq信息
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
virtral-host: /
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka # 注册
#暴露bus的刷新点
management:
endpoints:
web:
exposure:
include: 'bus-refresh'
config-provider
<!--bus-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
bootstrap.yml
#bootstrap优先级更高
#配置config-server地址
#配置获取配置文件的名称等信息
spring:
cloud:
config:
#配置config-server地址
#uri: http://localhost:9527
name: config #文件名
profile: dev #开发环境
label: master #分支
#从注册中心去寻找config-server地址
discovery:
enabled: true
service-id: CONFIG-SERVER
#配置rabbitmq信息
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
virtral-host: /
#暴露端点
management:
endpoints:
web:
exposure:
include: refresh # 或者 * 也可以代替,表示全部暴露不安全
config-consumer
pom.xml
<!--bus-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
bootstrap.yml
#bootstrap优先级更高
#配置config-server地址
#配置获取配置文件的名称等信息
spring:
cloud:
config:
#配置config-server地址
#uri: http://localhost:9527
name: config #文件名
profile: dev #开发环境
label: master #分支
#从注册中心去寻找config-server地址
discovery:
enabled: true
service-id: CONFIG-SERVER
#配置rabbitmq信息
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
virtual-host: /
#暴露端点
management:
endpoints:
web:
exposure:
include: refresh # 或者 * 也可以代替,表示全部暴露不安全
application.xml
server:
port: 9000
eureka:
instance:
hostname: localhost
client:
service-url:
defaultZone: http://localhost:8761/eureka # 注册
spring:
application:
name: config-consumer #设置当前应用的名称。将来会在eureka中application显示,将来需要使用该名称来获取路径
# 开启feign对hystrix的支持
feign:
hystrix:
enabled: true
结果:
发送后 client端 consumer和provider通过刷新就能获取到最新的外部配置文件