一、能干嘛?


二、什么是总线?

三、动态刷新全局广播
注意:必须先具备良好的RabbitMQ环境
演示广播效果,增加复杂度,再以3355为模板再制作一个3366
1、新建cloud-config-client-3366
1)POM


cloud2020
com.atguigu.springcloud
1.0-SNAPSHOT
4.0.0
cloud-config-client-3366
8
8
org.springframework.cloud
spring-cloud-starter-config
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
com.atguigu.springcloud
cloud-api-commons
${project.version}
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-actuator
org.springframework.boot
spring-boot-devtools
runtime
true
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
pom文件
2)YML
server:
port: 3366
spring:
application:
name: config-client
cloud:
config:
label: master
name: config
profile: dev
uri: http://localhost:3344
eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
management:
endpoints:
web:
exposure:
include: “*”
3)主启动
@EnableEurekaClient
@SpringBootApplicationpublic classConfigClientMain3366 {public static voidmain(String[] args) {
SpringApplication.run( ConfigClientMain3366.class,args);
}
}
4)controller
@RestController
@RefreshScopepublic classConfigClientController {
@Value(“${server.port}”)privateString serverPort;
@Value(“${config.info}”)privateString configInfo;
@GetMapping(“/configInfo”)publicString getConfigInfo(){return “serverPort:”+serverPort+”\t\n\n configInfo: “+configInfo;
}
}
2、设计思想
1) 利用消息总线触发一个客户端/bus/refresh,进而刷新所有客户端的配置

2) 利用消息总线触发一个服务端ConfigServer的/bus/refresh端点,进而刷新所有客户端的配置(更加推荐)

图二的架构显然更加合适,图一不适合的原因如下
打破了微服务的职责单一性,因为微服务本身是业务模块,它本不应该承担配置刷新职责
破坏了微服务各节点的对等性
有一定的局限性。例如,微服务在迁移时,它的网络地址常常会发生变化,此时如果想要做到自动刷新,那就会增加更多的修改
3、代码改造
1)给cloud-config-center-3344配置中心服务端添加消息总线支持
POM


org.springframework.cloud
spring-cloud-starter-bus-amqp
增加mq依赖
YML
server:
port:3344spring:
application:
name: cloud-config-center
cloud:
config:
server:
git:
uri: https://github.com/jwen1994/sprincloud-config.git
search-paths:- springcloud-config
username:@.com
password: wj_
label: master
rabbitmq:
host:192.168.216.130
port: 5672username: admin
password: password
eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
management:
endpoints:
web:
exposure:
include: “bus-refresh”
2)给cloud-config-center-3355客户端添加消息总线支持
POM


org.springframework.cloud
spring-cloud-starter-bus-amqp
增加mq依赖
YML
server:
port:3355spring:
application:
name: config-client
cloud:
config:
label: master
name: config
profile: dev
uri: http://localhost:3344
rabbitmq:
host: 192.168.216.130
port: 5672username: admin
password: password
eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
management:
endpoints:
web:
exposure:
include:”*”
3)给cloud-config-center-3366客户端添加消息总线支持
POM


org.springframework.cloud
spring-cloud-starter-bus-amqp
增加mq依赖
YML
server:
port:3366spring:
application:
name: config-client
cloud:
config:
label: master
name: config
profile: dev
uri: http://localhost:3344
rabbitmq:
host:192.168.216.130port:5672username: admin
password: password
eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
management:
endpoints:
web:
exposure:
include:”*”
4、测试
修改Github上配置文件增加版本号
curl -X POST “http://localhost:3344/actuator/bus-refresh”
一次发送,处处生效
四、动态刷新定点通知
不想全部通知,只想定点通知
只通知3355
不通知3366
公式:http://配置中心IP地址/actuator/bus-refresh/{destination}
/bus/refresh请求不再发送到具体的服务实例上,而是发给config server并通过destination参数类指定需要更新配置的服务或实例
我们这里以刷新运行在3355端口上的config-client为例
curl -X POST “http://localhost:3344/actuator/bus-refresh/config-client:3355”

五、总结

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/227743.html原文链接:https://javaforall.net
