参考官网: https://cloud.spring.io/spring-cloud-static/spring-cloud-config/2.2.3.RELEASE/reference/html/ 产生原因 由于分布式微服务将大的服务拆分成了一个个小的服务,而且由于微服务的规模小,通常一个项目可能产生及时上百个微服务,而就会有上百个配置文件,怎么样统一管理这些配置文件?
springcloud-config是什么? springcloud-config为微服务架构中的微服务提供集中式的外部支持,配置服务器为各个不同的微服务应用提供一个中心话的服务配置管理.
springcloud-config的作用是什么?
集中管理配置文件不同环境不同配置,动态化的配置更新,分环境部署比如dev/test/prod/beta/release运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置文件,服务会向配置中心统一拉取配置自己的信息当配置发生变动时,服务不需要重启即可感知到配置的变化并应用新的配置将配置信息以REST接口的形式暴露,#post、curl访问刷新均可…springcloud的架构如图
可参考文章: https://blog.csdn.net/weixin_45449911/article/details/106193212
(1) 申请gitHub账号(2) 在远程的git仓库创建一个本项目的仓库(3) 本地安装git(4) idea中集成git/github配置远程git库的地址
spring: application: name: cloud-config-center cloud: config: #config配置中心 server: git: uri: https://github.com/gulong-qk/cloud2020.git skipSslValidation: true #表示关闭ssl证书验证.如果报错无法连接上git,则可加此配置 search-paths: - cloud2020 label: master 主启动 @EnableConfigServer //启动config-server端 @SpringBootApplication @EnableConfigServer //启动config-server端 public class ConfigCenterMain3344 { public static void main(String[] args) { SpringApplication.run(ConfigCenterMain3344.class,args); } }5.测试 访问: http://localhost:3344/master/application-dev.yml 显示出github仓库中对应的application-dev.yml中的文件,及表示正确.
label:分支名 application:文件名 profile:微服务active profile激活的配置文件(dev/prod/test等等)
/{application}/{profile}[/{label}]/{application}-{profile}.yml/{label}/{application}-{profile}.yml #这种方式最好/{application}-{profile}.properties/{label}/{application}-{profile}.properties例如: http://config-3344.com:3344/master/config-dev.yml http://config-3344.com:3344/master/config-test.yml http://config-3344.com:3344/dev/config-dev.yml http://config-3344.com:3344/dev/config-test.yml在这里插入图片描述
1.建module 略 2.改pom
<!--配置config的客户端--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency>3.写bootstrap.yml
说明: 1.bootstrap.yml是系统级别的,加载优先级要高于application.yml 2.application.yml是用户及级别的,加载优先级要低于bootstrap.yml 3.我们通常约定bootstrap.yml用于读取外部的配置信息,他并不会被application.yml覆盖
spring: application: name: config-client cloud: config: #springcloud config的配置 label: master #分支名 name: config #文件名 profile: dev #激活得文件 uri: http://localhost:3344 #读取文件: http://localhost:3344/master/config-dev.yml或者是http://localhost:3344/master/config-dev.properties4.主启动 没有特别的注解
@SpringBootApplication public class ConfigClientMain3355 { public static void main(String[] args) { SpringApplication.run( ConfigClientMain3355.class,args); } }5.业务类
@RestController public class ConfigClientController { //这个config.info配置在远程的github仓库中,如果读取远程配置成功了,证明我们可以搭建成功 @Value("${config.info}") private String configInfo; /** *测试能都读取到配置文件中的信息 */ @GetMapping("/configInfo") public String getConfigInfo(){ return configInfo; } }6.测试
启动eureka启动config server启动config client访问client端,读取远程github上的配置信息,是否成功7.出现问题 如果远程库github上的文件修改变动了,检查config server配置信息是否发生变动,检查client是否配置更新.
server端配置刷新及时client端无法刷新配置,除非重启怎样再不重启client端的情况下,让client端刷新配置?
增加actuator的监控依赖
<!--增加健康检查--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>暴露监控端点
#暴露监控端点 management: endpoints: web: exposure: include: "*"controller类上添加注解@RefreshScope
步骤:
1.启动所有的项目eureka,server端和client端2.修改github远程库文件3.post请求格式,发送刷新请求 http://hostname:port/actuator/refresh4.验证config server端读取到的配置5.验证config client的配置重点: 运维人员在修改了github远程库之后,一定要发送一个post格式请求去刷新client端的配置. 请求格式:http://hostname:port/actuator/refresh
1.什么是消息总线? 在微服务架构系统中,通常会使用轻量级的消息代理来构建一个共享的消息平台,并且在这个平台通道上构建一个消息主题,让所有的微服务实例都连接上消息这个总线,一旦本消息主题有消息发布了,则所有的微服务实例都可以收到这个消息.
总之,消息总线其实就是一种消息通知机制,由消息队列实现.
2.能干什么?
3.实现机制 springcloud Bus支持两种消息代理:RabbitMQ和Kafka. 也就是两种消息队列实现.
参考文章: https://blog.csdn.net/weixin_45449911/article/details/106901842
(1) 通知config client,让客户端再去通知其他客户端 #利用消息总线触发一个客户端/bus/refresh,而刷新所有客户端的配置 (2) 通知config server端,让server再去通知其他客户端(推荐) #利用消息总线触发服务端/bus/refresh,而刷新所有客户端的配置
(1) pom文件增加bus的依赖 amqp这里的amqp协议springboot的默认实现是rabbitmq
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bus-amqp</artifactId> </dependency>(2) yml 增加 config server是修改application.yml config client 是修改bootstrap.yml
rabbitmq: #rabbitMQ的地址 host: localhost port: 5672 username: guest password: guest(3)修改更新配置文件的流程
修改github远程库文件
(2选1)发送post请求到config server端(client全部更新) curl -X POST "http://localhost:3344/actuator/bus-refresh"
(2选1)发送post请求到你指定修改的config client端(指定更新client) curl -X POST "http://localhost:3344/actuator/bus-refresh/config-client:3355"