前言
随着微服务越来越多,服务的配置文件也越来越多,这个时候对于配置文件的管理其实可以完全抽离出来,对于项目启动时需要的配置写入到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
备注:动态刷新配置 在开发和测试环境使用,尽量不要或者少在生产环境使用。
原文地址:http://blog.51cto.com/4837471/2321802