SpringCloud>12 - 自动刷新–bus
扯淡:
【上一章】配置刷新是针对某一个服务的,请求对应服务的refresh只能更新自己的配置。而在实际生产环境中服务都是以集群的方式存在的,不可能每一个都去重启,spring cloud bus只需要请求通知一个。
springboot、springcloud、docker学习目录:【传送门】
webhook:
码云、GitHub上均有此功能。当指定的事件触发时,会发送post请求给事件的发生者。
这里可添加事件触发后的post请求地址,以及事件(push,issue、pull等),请求地址可以指定为刷新服务的地址。
spring cloud bus 简介:
消息总线,通过消息中间件连接分布式的各个节点,以广播的方式在分布式系统中传播消息。常用的有RabbitMQ、kafka。
spring cloud bus 使用:
基本步骤:
1、提交修改后的配置,触发事件响应post请求(git中webhook配置的地址,为了方便管理,此处的post请求地址配置为server端)。
2、config server 接收到请求,将配置更新的消息发送到消息总线。
3、mq 接收到消息后广播消息到其它客户端。
4、客户端接收到消息请求服务端获取自己的配置。
config server修改:
springcloud_config模块:
1、pom依赖:
<dependencies>
<!-- 提供监控功能 此处引入是需要refresh 的功能 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- 使其支持消息总线 也可使用卡夫卡-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
<!-- config server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
2、添加mq的配置:
# mq 配置
spring:
rabbitmq:
host: 192.168.25.133
port: 5672
username: guest
password: guest
# 2.0之后,默认的监控端点地址加了上下文路径 actuator。可通过 management.endpoints.web.base-path属性进行修改,默认是: actuator
# 2.0之后,默认只开启了端点 info、 health。其他的需要通过 management.endpoints.web.exposure.include进行额外配置。
# 配置刷新
management:
endpoints:
web:
exposure:
include: '*'
config client修改:
每个需要通过config server拉取配置的微服务都是config client:
1、pom依赖:
<!-- 提供监控功能 此处引入是需要refresh 的功能 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- 使其支持消息总线 也可使用卡夫卡-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
2、修改配置:
spring:
cloud:
config:
# config server 地址
uri: http://127.0.0.1:8000
# name、profile 配置文件的命名
name: user
profile: dev
label: master # 存储为git时 默认为 master
bus:
trace:
enabled: true # 开启消息追踪 默认 false
# mq 配置
rabbitmq:
host: 192.168.25.133
port: 5672
username: guest
password: guest
# 2.0之后,默认的监控端点地址加了上下文路径 actuator。可通过 management.endpoints.web.base-path属性进行修改,默认是: actuator
# 2.0之后,默认只开启了端点 info、 health。其他的需要通过 management.endpoints.web.exposure.include进行额外配置。
# 配置刷新
management:
endpoints:
web:
exposure:
include: '*'
此处bus和mq的配置均可放到远程配置文件中,我为了方便修改放到了bootstrap.yml中,可能修改的配置放到远程配置文件中管理。
测试:
1、启动Eureka,config server,用户微服务使用不同的端口启动两个。
注意:版本或依赖的不同,可以访问的端点可能不同,具体看自己的日志。
1.1、destination:service id 具体到某一个微服务,当不想所有的微服务重新获取配置时使用。
例如:http://127.0.0.1:8000/actuator/bus-refresh/springcloud-user:8082
修改配置后只让用户为微服务的8081刷新配置。
1.2、没有参数:所有的微服务重新获取
例如:http://127.0.0.1:8000/actuator/bus-refresh
2、分别访问127.0.0.1:8081/user/getRefreshTest、127.0.0.1:8082/user/getRefreshTest
可以返回配置文件配置的sms。
3、修改git上配置文件sms字段值。
4、请求:http://127.0.0.1:8000/actuator/bus-refresh 刷新配置,也可将此链接配置到webhook中,当提交代码到码云上时,触发push事件来请求该地址。
5、再次请求服务地址,得到新的结果。
总结:
1、webhook 可使用回调地址做到提交代码发送请求。
2、某些项目会将刷新配置的请求做成按钮的形式。、
3、spring cloud bus 是用消息中间件将分布式的各节点联系起来。
4、配置修改通知config server,server 再通知各个微服务访问server拉取自己的最新配置。
代码地址:
https://gitee.com/cpla026/springcloud/tree/master/springcloud_parent/springcloud_user_bus
个人学习分享
更多 springboot、springcloud、docker 文章,长按关注吧: