尚硅谷springcloud2020day10(p74-82)

一。config配置中心
当微服务越来越多时,微服务运行所必需的配置文件也会越来越多,数量膨胀带来的后果就是不好管理和修改,所以spring cloud提供了config server配置中心–集中化的外部配置支持,可以减少很多重复的配置,而且便于修改。
有如下作用:
1.集中管理配置文件
2.不同环境不同配置,动态更新
3.运行期间动态调整,不需要在每个服务的机器上编写配置文件,服务统一去配置中心拉取文件
4.当配置改变,服务无需重启即可感知到配置变化并应用新配置。
5.配置信息以rest接口的形式暴露
二。config server配置
1.pom:spring-cloud-config-server
2.application.yml:
server:
port: 3344
spring:
application:
name: cloud-config-center
cloud:
config:
server:
git:
uri: https://gitee.com/cfy19981223/springcloud-config.git

      username: 
      password: 
  label: master

eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka
这里注意,可以使用http与ssh两种方式连接远程仓库,即uri填写的仓库地址,这里就用http方式了。用http方式时还需要配置仓库对应账号的用户名和密码。
3.主启动类添加@EnableConfigServer
三。常用的读取配置中心的配置文件的方式
label:分支,application:服务名,profile:环境
1./lable/application-profile.yml,
2./application-profile.yml
3./application/profile/lable
四。config client 配置
1.pom:spring-cloud-config-client和spring-boot-starter-web
2.新建boostrap.yml,比application.yml优先级要高:
server:
port: 3355
spring:
application:
name: config-client
cloud:
config:
name: config
label: master
profile: dev
uri: http://localhost:3344
# 这些配置相当于这个配置文件去读取了localhost:3344/master/config-dev.yml
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka
3.主启动类添加@EnableEurekaClient
4.新建controller用@value去取读到的config-dev.yml中的信息:
@Value("${config.info}")
private String info;
@GetMapping("/info")
public String getPort(){
return info;
}
启动各模块,访问localhost:3355/info即可成功读到localhost:3344/master/config-dev.yml中的信息
五。config client 动态刷新
1.boostarp.yml:
management:
endpoint:
endpoints:
web:
exposure:
include: “*”
2.controller添加注解@RefreshScope,使其具备刷新的能力:gitee上修改了配置文件后,需要向3355发一次post请求:http://localhost:3355/actuator/refresh
修改后发post请求通知config client确实可以达到刷新效果,但是如果服务器太多一个一个发就很麻烦,如果用广播发送又无法做到只发给需要的,所以,引入下一个知识点:spring cloud bus–消息总线
六。消息总线Bus
1.bus就是一个轻量级的消息代理,系统中所有的微服务实例都会连接上bus,因为bus中产生的消息会被所有实例监听与消费,所以被称为消息总线。连接上bus的每个实例,都可以广播一些让其他连接在bus上的实例知道的消息
2.使用bus就可以配合config实现动态刷新,支持rabbitmq与kafka
3.最终选择的流程如下:配置更新后发送post请求给配置中心,然后配置中心给bus发送消息,然后由bus通知所有config client
七。bus的使用
config server端:
1.pom:spring-cloud-starter-bus-amqp
2.application.yml:
rabbitmq:
host: rabbitmq所在服务器的ip
port: 5672
username: guest
password: guest
management:
endpoints:
web:
exposure:
include: ‘bus-refresh’
config client端:
1.bootstrap.yml:
rabbitmq:
host: rabbitmq所在服务器的ip
port: 5672
username: guest
password: guest
配置好后,启动各模块,然后在gitee上修改配置文件,发送curl -X POST "http://localhost:3344/actuator/bus-refresh,通知配置中心配置已修改,访问启动的 config client获取配置信息,已更新。
查看我们rabbitmq的可视化界面,会发现多出了一个叫springCloudBus的交换机,这个交换机其实就是我们的spring cloud bus
八。指定需要的config client更新配置
修改配置文件后,想指定某些客户端更新配置,那么发送的post请求就要变:curl -X POST "http://localhost:3344/actuator/bus-refresh/{destination},比如我们指定更新3355微服务,那么请求就是curl -X POST "http://localhost:3344/actuator/bus-refresh/config-client:3355,3366微服务不会接到通知,访问后成功验证效果。
个人总结:bus目前这样的定点刷新,如果要定点通知多个,请求就会很长,而且还不知道能不能一次通知多个,而且我也不喜欢自己去手动发一个post请求给配置中心,cloud应该不可能在这一步这么原始,我觉得下一个知识点消息驱动spring cloud Stream应该可以解决这个问题
今天直接就学完了config和bus,确实一个知识串起一个知识,保持学习的热情很重要

你可能感兴趣的:(java,spring,cloud)