springcloud之config配置中心搭建

在使用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
# s p r i n g . a p p l i c a t i o n . n a m e − {spring.application.name}- spring.application.name{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配置中心,最后到各个不同的服务,因为所有的服务都依赖与这两个服务,否则无法正常启动。启动日志看到拉取信息说明成功
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值