前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >『互联网架构』软件架构-分布式集中配置中心Spring Cloud Config详解(下)(104)

『互联网架构』软件架构-分布式集中配置中心Spring Cloud Config详解(下)(104)

作者头像
IT架构圈
发布2019-07-12 14:41:26
4880
发布2019-07-12 14:41:26
举报
文章被收录于专栏:IT架构圈IT架构圈

上次咱们主要说下,如果制作server,client端如何获取,而且还说了加密和解密。这次咱们说说动态刷新配置,消息队列如何配置分布式系统统一配置和高可用。源码:https://github.com/limingios/netFuture/tree/master/源码/『互联网架构』软件架构-分布式集中配置中心Spring Cloud Config详解(上)(103)/

(一)配置信息手动刷新

很多场景下,需要在运行期间动态调整配置。如果配置发生了修改,微服务要如何实现配置的刷新呢?重点都是开关值这块,一开始认为开关可以走的,后来发现流量太大了,必须把开关关闭。动态的改内存中的值。

  • 源码

10-ms-config-client-refresh

  • 添加依赖

其中spring-boot-starter-actuator提供了/refresh端点,用于配置的刷新

代码语言:javascript
复制
    <dependency>      <groupId>org.springframework.boot</groupId>      <artifactId>spring-boot-starter-web</artifactId>    </dependency>    <dependency>      <groupId>org.springframework.cloud</groupId>      <artifactId>spring-cloud-starter-config</artifactId>    </dependency>    <dependency>      <groupId>org.springframework.boot</groupId>      <artifactId>spring-boot-starter-actuator</artifactId>    </dependency>
  • 在Controller上添加注解@RefreshScope,添加这个注解的类会在配置更改时得到特殊的 处理
  • 演示功能

启动10-ms-config-server项目

启动10-ms-config-client-refresh

1.启动项目(启动两个,一个端口8081,一个端口8082), 访问地址:http://localhost:8081/profile, 得到结果:dev-1.0, 访问地址:http://localhost:8082/profile, 得到结果:dev-1.0

2.修改git仓库里的配置文件ms-config-dev.properties的内容为:profile=dev­-1.0-­change

3.再次访问地址:http://localhost:8081/profile,得到结果还是 dev-1.0,说明配置尚未刷新

4.发送post请求:http://localhost:8081/refresh,返回结果:"profile",表 示profile这个配置属性已被刷新

5.再次访问 http://localhost:8081/profile,得到结果:dev-1.0-change,说明属性已刷新

6.再次访问 http://localhost:8082/profile,得到结果:dev-1.0,说明8082的服务 并没有刷新,还需再次手动刷新才能更新配置

(二)配置信息自动刷新

使用/refresh端点手动刷新配置,但如果所有微服务节点的配置都需要手动去刷新,工作量可想而知。不仅如此,随着系统的不断扩张,会越来越难以维护。因此,实现配置的自动刷新是很有必要的,Spring Cloud Bus就可以实现配置的自动刷新。Spring Cloud Bus使用轻量级的消息代理(例如 RabbitMQ、 Kafka等)连接分布式系统的节点,这样就可以广播传播状态的更改(例如配置的更新)或者其他的管理指令。可将Spring Cloud Bus想象成一个分布式Spring Boot Actuator。

  • 源码 10-ms-config-server-refresh-cloud-bus和10-ms-config-client-refresh-cloud-bus
  • 服务端 10-ms-config-server-refresh-cloud-bus 添加依赖
代码语言:javascript
复制
    <dependency>      <groupId>org.springframework.cloud</groupId>      <artifactId>spring-cloud-config-server</artifactId>    </dependency>    <dependency>      <groupId>org.springframework.cloud</groupId>      <artifactId>spring-cloud-starter-bus-amqp</artifactId>    </dependency>
  • 服务端 10-ms-config-server-refresh-cloud-bus 配置文件增加rabbitmq
  • 客户端 10-ms-config-client-refresh-cloud-bus 添加依赖
代码语言:javascript
复制
 <dependency>      <groupId>org.springframework.boot</groupId>      <artifactId>spring-boot-starter-web</artifactId>    </dependency>    <dependency>      <groupId>org.springframework.cloud</groupId>      <artifactId>spring-cloud-starter-config</artifactId>    </dependency>    <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>
  • 客户端 10-ms-config-client-refresh-cloud-bus 配置文件增加rabbitmq
  • rabbitmq docker的方式安装
代码语言:javascript
复制
docker run -d -p 5672:5672 -p15672:15672 --name myrabbitmq rabbitmqdocker ps

运行项目(运行一个config server和两个config client),修改git仓库里的配置文件,然后用post方式请求地址:http://localhost:8080/bus/refresh,如果返回成功,则config的所有客户端的配置都会动态刷新。【里面关于rabbitmq的地址配置根据实际情况配置吧】 一个config server

两个config client

修改git仓库里的配置文件

post方式请求地址:http://localhost:8080/bus/refresh,如果返回成功

客户端动态刷新后

通过mq的方式动态的管理分布式的所有系统刷新配置文件,是不是很爽。

(三)config的安全认证
  • 源码

10-ms-config-server-authenticating和10-ms-config-client-authenticating

  • 10-ms-config-server-authenticating 添加依赖
代码语言:javascript
复制
    <dependency>      <groupId>org.springframework.cloud</groupId>      <artifactId>spring-cloud-config-server</artifactId>    </dependency>    <dependency>      <groupId>org.springframework.boot</groupId>      <artifactId>spring-boot-starter-security</artifactId>    </dependency>
  • 10-ms-config-server-authenticating application.yml配置
  • 10-ms-config-client-authenticating 添加依赖
代码语言:javascript
复制
<dependency>      <groupId>org.springframework.boot</groupId>      <artifactId>spring-boot-starter-web</artifactId>    </dependency>    <dependency>      <groupId>org.springframework.cloud</groupId>      <artifactId>spring-cloud-starter-config</artifactId></dependency>
  • 10-ms-config-client-authenticating application.yml配置

首先服务端启动安全机制,用户名,密码。客户端连接的时候通过用户名和密码。

(四)config与eureka配合使用

10-ms-config-server-eureka,10-ms-config-client-eureka,08-ms-eureka-server config配置中心的高可用

  1. config server未注册到eureka上的情况,通过负载均衡器来实现
  2. config server注册到eureka上的情况,client端也注册到eureka上,则已经实现高可用

PS:基本上springcloudconfig的配置已经讲完了,这次的比上次更加实用,高可用,高性能。已经凌晨2点了有点太累了,不总结了,希望各位老铁可以get到。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程坑太多 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • (一)配置信息手动刷新
  • (二)配置信息自动刷新
  • (三)config的安全认证
  • (四)config与eureka配合使用
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档