SpringCloud-微服务配置统一管理SpringCloud Config
前言:对于应用,配制文件通常是放在项目中管理的,它可能有spring、mybatis、log等等各种各样的配置文件和属性文件,另外你还可能有开发环境、测试环境、生产环境等,这样的话就得一式三份,若是传统应用还好说,如果是微服务呢,这样不光配置文件有可能冗余而且量大,繁重复杂,不好维护,这样的话就需要一个配置文件的统一管理了。
一、SpringCloud Config简介
SpringCloud Config为分布式系统外部化配置提供了服务器端和客户端的支持,它包括ConfigServer和ConfigClient两部分。
Server:
- 实例一般多于两个,以实现HA;
- 配置以文件形式存储,快速支持目前以SpringBoot的开发方式的配置文件;
- 支持GIt,码云,SVN,本地文件等多种形式;
- 支持属性加密;
Client:即各自的微服务应用;
使用SpringCloud BUS配置和借助Git仓库的WebHooks自动刷新;
二、SpringCloud Config基本使用
创建服务端:
1、前面简单介绍了一下Config,那么首先要做的准备是先到Git仓库或者码云中创建一个项目并新建一些配置文件 spring-cloud-repo:
2、创建Maven工程 config-server,添加依赖:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency>
3、创建启动类,并加上开启Config服务端注解@EnableConfigServer:
@SpringBootApplication @EnableConfigServer public class ConfigApplication { public static void main(String[] args) { SpringApplication.run(ConfigApplication.class, args); } }
4、添加application属性文件:
server.port=9000 spring.application.name=config-server-9000 spring.cloud.config.server.git.uri=https://gitee.com/lfalex/spring-cloud-repo
5、启动项目,简单测试,访问:localhost:9000/application/dev,localhost:9000/application-dev.properties:
访问规则:
/{appication}/{profile}/[{label}] /{application}-{profile}.yml /{application}-{profile}.properties /{label}/{application}-{profile}.properties /{label}/{application}-{profile}.yml
它们都可以映射到对应的配置文件{application}-{profile}.properties,其中{label}为具体的分支,默认为master;
创建客户端(一般为具体的微服务):
1、创建Maven项目 config-client,添加依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 实现Config的客户端配置 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <!-- 实现通过端点refresh手动刷新 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
2、创建一般启动类即可,无需添加注解,创建Controller,为测试做准备:
@Value("${version}") private String version; @RequestMapping("/getVersion") public String getVersion() { return this.version; }
3、为了更明显的测试Config是否生效,在application配置文件中添加:
server.port=9001
4、添加bootstrap.properties配置文件,bootstrap.properties为默认文件名,在springcloud中配置文件有个优先级的概念,当本地application.properties文件和bootstrap.properties文件中配置了同样的属性不同的值,由于bootstrap的优先级高,则在bootstrap中的属性不会被application中的覆盖,反而会覆盖掉application中的配置:
#对应着config server所获取配置文件的{application}和URL spring.application.name=application spring.cloud.config.uri=http://localhost:9000/ #对应着文件后面的后缀{profile} spring.cloud.config.profile=dev #分支 spring.cloud.config.label=master
5、先启动服务器,再启动客户端,观察端口和页面,由于前面在application中添加了端口为9001,而远程仓库的配置文件中也添加了端口9999:
这样就实现了基本的远程配置仓库了,但是一旦有文件更改还得重新启动项目,这样就很有问题了,所以需要刷新,使用/refresh端点刷新:
1、在application或远程文件中添加:
#由于要使用actuator,所以必须要将安全权限关闭 management.security.enabled=false
2、在controller上添加注解@RefreshScope注解:
@RestController @RefreshScope //非重启项目手动刷新配置注解 public class ConfigController { 。。。。 }
3、启动测试,打开,修改version=dev-3.0.0为version=dev-4.0.0,并发送刷新请求http://localhost:9999/refresh,刷新测试页面查看:
三、SpringCloud Bus自动刷新配置
前面的基于端点刷新,只针对一个服务,若为多个微服务,这样就很繁琐,所以需要一个可以集体刷新或指定刷新的组件=》SpringCloud Bus;
1、使用SpringCloud Bus需要使用RabbitMQ,未安装的请安装,基于之前的端点刷新的项目,添加依赖:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bus-amqp</artifactId> </dependency>
2、在bootstrap中增加RabbitMQ的配置:
spring.rabbitmq.host=localhost spring.rabbitmq.port=5672 spring.rabbitmq.username=guest spring.rabbitmq.password=guest
3、启动 config-bus-client测试,打开,修改version=dev-3.0.0为version=dev-4.0.0,并发送刷新请求http://localhost:9999/bus/refresh,刷新测试页面查看:
还可以通过Git或者码云的WebHooks来发送修改刷新配置请求:
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
(4)学习笔记 ) ASP.NET CORE微服务 Micro-Service ---- Consul服务发现和消费
上一章说了 Consul服务注册 现在我要连接上Consul里面的服务 请求它们的API接口 应该怎么做呢? 1.找Consul要一台你需要的服务器 1.1 获取Consul下的所有注册的服务 using (var consulClient = new ConsulClient(c => c.Address = new Uri("http://127.0.0.1:8500"))) { var services = consulClient.Agent.Services().Result.Response; foreach(var service in services.Values) { Console.WriteLine($"id={service.ID},name={service.Service},ip={service.Address},port={service.Port}"); } } 1.2 随机取一个Name为MsgService的服务 下面的代码使用当前 TickCount 进行取模的方式达到随机获取一台服务器实例的效果,这叫做“客户端负载均衡”: usin...
- 下一篇
全链路控制、构建Devops改善中台问题,让IT成为企业核心竞争力
全链路控制、构建Devops改善中台问题,让IT成为企业核心竞争力 2018云栖大会上海峰会ET农业大脑专场,伯俊软件总裁孙一晖带来以“中台赋能让IT成为企业核心竞争力”为题的演讲。互联网中台作为新零售的基础,它必须得改善变化快、系统多和接口多的问题。那么开发人员为了解决这些问题是怎样快速配置平台和进行全链路控制的,进而让中台赋能IT成为企业的核心竞争力。数十款阿里云产品限时折扣中,赶快点击这里,领劵开始云上实践吧!直播视频回顾以下内容根据现场分享整理而成。 产品简介 全链路控制可以监控整个系统的运营,它具有互联网架构本身的优势,可以看到每一个服务被调用的次数、时间以及监控到每一个页面等。DeVops可以做到对产品的交付、测试、功能开发和维护。全链路控制和Devops合力对中台问题进行改善,从而让IT成为企业核心竞争力。 为什么做中台? 传
相关文章
文章评论
共有0条评论来说两句吧...