前言

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

创建配置中心项目

入口文件添加@EnableConfigServer注解

配置文件:

#服务名称
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客户端包

       <!--配置中心客户端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-client</artifactId>
        </dependency>

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

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

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

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

       <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>

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

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

4.暴露全部的监控信息

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

5.需要拉取最新的地方添加@RefreshScope注解

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

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

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