在使用springcloud做项目,我们会把原有的各个模块需要拆分成多个服务,服务数据数量多,且很多的配置内容重复,且维护的代价太高比如修改数据库的ip,修改了某个中间件的ip,这就需要修改每个涉及到这个配置的服务,可想而知需要做多少的重复工作,而且手动修改还十分容易出错 使用配置中心就可以让维护人员只修改一个地方(一般是使用git),并主动通知对应的服务,取更新拉取最新的配置,下面我们就来聊聊关于springcloud 配置详解?接下来我们就一起去了解一下吧!

springcloud 配置详解(springcloud之config配置中心搭建)

springcloud 配置详解

在使用springcloud做项目,我们会把原有的各个模块需要拆分成多个服务,服务数据数量多,且很多的配置内容重复,且维护的代价太高。比如修改数据库的ip,修改了某个中间件的ip,这就需要修改每个涉及到这个配置的服务,可想而知需要做多少的重复工作,而且手动修改还十分容易出错。 使用配置中心就可以让维护人员只修改一个地方(一般是使用git),并主动通知对应的服务,取更新拉取最新的配置。

1.配置中心架构图2.流程说明

各个服务的配置信息,统一集中在git仓库进行管理,并创建一个config-server服务作为"中间人",来处理服务和git之间的关系,消息总线用在动态更新时使用,这里使用rabbitmq。 1.当服务启动时候,会取config-server获取服务所需的配置信息 2.config-server会主动取git仓库拉取最新的配置,并缓存在本地仓库中 3.服务得到最新配置后,也会将配置加载到本地进行缓存,并加载初始化工作,最后启动服务

3.消息总线

只要服务没有进行重启,服务会运行期间都是回去的本地配置缓存,若此时修改了git仓库中的配置信息,如何及时通知到对应的服务并更新服务配置呢?这时候消息总线就起到了作用。 配置中心提供了一些动态刷新配置的接口,当我们修改了git配置,调用对应的接口,即可刷新对应服务的配置信息,当然前提是各服务,config-server连接的是同一个rabbitmq地址,因为消息的通知是通过mq队列处理的。

4.配置中心搭建

1.创建项目子模块config-server,添加依赖

<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <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>

启动类添加注释 @EnableEurekaClient @EnableConfigServer 主要是配置注册中心eureka客户端,配置中心config-server服务端,还有rabbitmq消息总线

2.配置文件 <1>创建bootstrap.yml文件

server: port: 8762 spring: application: name: config-server profiles: active: @spring.active@ cloud: bus: enabled: true trace: enabled: true config: name: spring-admin,rabbitmq server: git: uri: git地址 # 配置git仓库的地址 username: 账号 # git仓库的账号 password: 密码 # git仓库的密码 searchPaths: /*,/*/*,/*/*/* clone-on-start: true force-pull: true repos: xxx: pattern: xxx* uri: git地址 searchPaths: /*,/*/*,/*/*/* clone-on-start: true force-pull: true management: endpoints: web: base-path: / exposure: include: "*" endpoint: health: show-details: ALWAYS

这里配置了两个仓库地址,供两个项目一起使用,如果只要一个项目,删除内层repos节点即可

简单说明下几个节点的含义:

spring.cloud.config.name:表示需要拉取配置文件的前缀,下面会讲到规则 searchPaths:表示需要在git仓库扫描的路径 force-pull:表示强制拉取,可以防止本地文件修改导致更新失败

<2>添加application文件

这里配置了不同环境的配置文件,每个都是配置了rabbitmq的信息,主要是为了消息总线使用

spring: rabbitmq: host: 127.0.0.1 port: 5672 username: xxxx password: xxxx

5.客户端搭建

1.添加依赖

<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-client</artifactId> </dependency>

2.客户端服务新建配置文件bootstrap.yml

server: port: 8060 spring: application: name: xxx #服务名称 profiles: active: @spring.active@ cloud: bus: enabled: true trace: enabled: true config: fail-fast: true name: xx1,xx2,xx3 enabled: true #开启配置 profile: @spring.active@ #版本 label: master #git配置的分支信息,master类似的 discovery: enabled: true service-id: config-server

当然也需要在application.yml文件中配置mq信息和其他自己所需的信息 简单说明下几个节点的含义:

label:拉取git那个分支信息 service-id:配置中心服务名,通过注册中心来管理调用信息

6.加载规则说明

git配置文件存在形式,根目录为不同的类型的目录,例如rabbitmq,mysql等,以下为rabbitmq目录下的文件列表

各个微服务加载git上的配置文件,默认加载的文件名规则为:应用名称-环境变量.yml # {spring.application.name}- s p r i n g . a p p l i c a t i o n . n a m e − {spring.cloud.config.profile}-${spring.cloud.config.label} 当然我们也可以自定义应用名称前缀,name包含多个值,用逗号分隔

若profile的值为dev,则加载的配置文件为feign-hystrix-dev.yml,db-dev.yml等 配置客户端每次在启动的时候,会加载服务端的配置文件。

7.动态刷新配置

问题1:修改git配置文件,不重启任何应用的情况下,重新加配置文件? 使用postman工具,发送post请求,请求地址为: 1.重新加载所有应用配置信息:http://{config-server-ip}:8762/bus-refresh {config-server-ip}表示服务配置端ip 如果存在多个配置服务端,该刷新方式也会同时刷新其他配置服务端 2.重新加载单个应用的配置信息:http://{config-server-ip}:8762/bus-refresh/{destination} {destination}表示某个客户端应用名称 例如common-invoice-service

问题2:查看此时配置服务端的所加载到的配置文件 Url访问地址: http://config-server的IP地址:8762/{label}/{filename} {label}表示git分支,例如master {filename}表示文件名称,例如feign-hystrix-dev.yml

8.启动顺序

首先启动eureka注册中心,其次启动config-server配置中心,最后到各个不同的服务,因为所有的服务都依赖与这两个服务,否则无法正常启动。启动日志看到拉取信息说明成功