引入依赖
启动类:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
@SpringBootApplication
@EnableConfigServer
public class ConfigCenterApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigCenterApplication.class, args);
}
}
添加配置:application.yml
server:
port: 9001
spring:
application:
name: config-center
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
创建Git仓库
配置Git仓库
spring:
cloud:
config:
server:
git:
uri: https://gitee.com/pengjunlee/config-cloud.git
username: 你的码云账号
password: 你的账号密码
引入依赖
先将product-service中的application.yml文件改名为bootstrap.yml(bootstrap.yml在应用上下文启动阶段加载,比application.yml早),然后再对其内容进行修改:
# 设置服务(应用)名称
spring:
application:
name: product-service
# 指定用于获取配置的配置中心服务(应用)名称
cloud:
config:
discovery:
enabled: true
serviceId: config-center
profile: dev
# 指定分枝版本,默认为master
label: master
# 指定注册中心地址
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
客户端通过发送Http请求来从配置中心读取配置,这些Http请求的URI遵循以下规则:
/{name}-{profiles}.properties
/{name}-{profiles}.yml || /{name}-{profiles}.yaml
/{label}/{name}-{profiles}.properties
/{label}/{name}-{profiles}.json
/{name}/{profiles}/{label:.*}
/{name}-{profiles}.json
/{label}/{name}-{profiles}.yml || /{label}/{name}-{profiles}.yaml
/{name}/{profiles:.*[^-].*}
/{name}/{profile}/{label}/**
/{name}/{profile}/{label}/**
/{name}/{profile}/**
其中各个参数的含义如下:
name 服务的ID,即spring.application.name的值,本例中为 product-service;
profiles 激活的profile,通过spring.cloud.config.profile指定,本例中为 dev;
label 分枝的版本,通过spring.cloud.config.label指定,本例中为默认值 master;
接下来我们需要按照上述规则,在Git仓库的相应位置创建配置文件。根据bootstrap.yml中的配置,资源请求地址可以为 /master/product-service-dev.yml 。
在Git仓库的master分枝中创建product-service-dev.yml和product-service-test.yml两个文件,分别将服务的启动端口指定为8771和8772:
# product-service-dev.yml
server:
port: 8771
# product-service-test.yml
server:
port: 8772
文件创建完成之后,启动配置中心,先在浏览器对两个文件进行访问。
此时,启动product-service将读取http://localhost:8888/product-service-dev.yml中的配置,即启动端口为8771。若将 bootstrap.yml中的spring.cloud.config.profile的值设置为test,则将读取http://localhost:8888/product-service-test.yml中的配置,应用的启动端口也会相应地变为8772,证明从配置中心读取配置成功。
二、工作流程
以上两张图对于理解自动刷新的工作流程很关键
1.在gitee配置文件仓库修改对应微服务(e.g. ServiceA)的配置文件并提交
2.手动触发自动刷新,使用Postman发送post请求到配置中心微服务例如http://localhost:9000/actuator/busrefresh
3.添加了sprint-boot-starter-actuator依赖的配置中心微服务在接收到Postman发送的请求后,将消息发送给spring cloud bus
4.spring cloud bus 将消息传递给消息代理 rabbitmq-server,加入消息队列
5. rabbitmq的消费端即微服务(ServiceA)监听到消息后消费了消息,主动发送了刷新配置文件的请求到配置中心微服务
6. 该配置文件对应的微服务(ServiceA)实现了自动刷新配置而无须重启微服务
自动刷新 客户端调用下面接口 实现配置的自动同步
http://127.0.0.1:3355/actuator/refresh