前言

随着微服务越来越多,服务的配置文件也越来越多,这个时候对于配置文件的管理其实可以完全抽离出来,对于项目启动时需要的配置写入到bootstrap.yml中,那些可能会经常改变的则放到svn或者git上进行管理,项目启动时,会去git或者svn上拉取对应的配置文件启动。

创建配置中心项目

SpringCloud之配置中心_第1张图片

入口文件添加@EnableConfigServer注解
SpringCloud之配置中心_第2张图片

配置文件:

#服务名称
spring:
  application:
    name: config-server
  cloud:
    config:
      server:
            #这里填写你自己的git项目路径,用户名密码
        git:
          uri: https://gitee.com/flyOX/config-center
          username: flyOX
          password: ××××××
          timeout: 5
          default-label: master

#服务的端口号
server:
  port: 9100

#指定注册中心地址
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

到这里那么配置中心就已经开发完成。

改造业务服务从配置中心获取配置文件

针对网关、商品服务、订单服务、我在 https://gitee.com/flyOX/config-center做了相应的一个配置文件。

1.修改application.yml配置文件为bootstrap.yml,该出如下内容:

#指定注册中心地址
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

#服务的名称
spring:
  application:
      #name不同业务服务名ServiceId
    name: order-service
  #指定从配置中心
  cloud:
    config:
      discovery:
        service-id: CONFIG-SERVER
        enabled: true
      profile: test

2.pom文件添加Config客户端包

       
        
            org.springframework.cloud
            spring-cloud-config-client
        

那么我们重新启动项目,一定要注意项目启动顺序:注册中心->配置中心->产品服务->订单服务->网关服务。到注册中心控制台查看相应服务是否以及启动起来了。
SpringCloud之配置中心_第3张图片
同时看看相应的服务控制台输出的内容:
SpringCloud之配置中心
它是通过拉取git上的文件启动的。那么到这里我们就以及把配置中心启动起来了。

实现自动拉取最新配置文件

上面可以从git拉取配置文件,但是如果git上文件修改了,又不想通过重启服务来拉取最新的配置文件我们该怎么做呢?我们可以通过RabbitMQ+Refresh的方式做自动获取最新配置。
这里就是SpringCloud中的Bus:消息总线的方式,如果一旦配置文件修改,就发送一条消息到队列中,那么服务接受到消息则去拉取最新配置,这样就解决了这个问题。

1.安装一个RabbitMQ,可以通过docker安装,很快。
2.pom文件中添加依赖:

       
            org.springframework.boot
            spring-boot-starter-actuator
        
        
            org.springframework.cloud
            spring-cloud-starter-bus-amqp
        

3.在配置文件中添加如下:

spring:
                  rabbitmq:
                    host: localhost
                    port: 5672
                    username: guest
                    password: guest

4.暴露全部的监控信息

management:
                  endpoints:
                    web:
                      exposure:
                        include: "*"

5.需要拉取最新的地方添加@RefreshScope注解
SpringCloud之配置中心_第4张图片

6.http://服务ip:端口/actuator/bus-refresh

备注:动态刷新配置 在开发和测试环境使用,尽量不要或者少在生产环境使用。

参考资料:消息总线
项目文件