Spring Cloud微服务学习笔记之统一配置中心 config

统一配置中心config

  • 一、配置中心config
    • 1.1 Config Server 的使用
    • 1.2 Config Client 的使用
  • 二、Spring Cloud Bus 自动更新配置
    • 2.1 Spring Cloud Bus实操
      • 1. 在config和order服务中添加pom依赖
      • 2. 实现bus-refresh接口
      • 3. 测试Spring Cloud Bus
    • 2.2 WebHook自动触发

一、配置中心config

为什么需要统一配置中心config
◆不方便维护(多个开发者修改同一个配置文件)
◆配置内容安全与权限
◆更新配置项目需重启。

配置流向图示
Spring Cloud微服务学习笔记之统一配置中心 config_第1张图片

1.1 Config Server 的使用

首先,在IDEA中通过Spring Initializr选择Spring Cloud Discovery 中的Eureka Discovery Client 组件,创建一个Spring Boot项目,添加pom依赖在主类添加@EnableEurekaClient注解,在application.yml中添加相应配置。

  1. 添加@EnableConfigServer并添加pom依赖
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-Config—Server</artifactId>
</dependency>
  1. 新建Git项目添加order服务的order.yml配置文件,并在Config服务中配置

config中的application.yml

spring:
	application:
		name:config 
	cloud:
		config:
			server:
				git:
					uri: https://github.com/xxxx/xxxx
					username: xxx 
					password: xxx
					basedir: /user/a/b/c/ #本地Git存放配置的路径
  1. 在Git工程上新建release分支,在order-dev.yml中添加环境(开发测试等)和分支信息
spring:
  application:
    name: order
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
env:
	dev #test
lable:
	release
  1. 访问路径规则

访问 locahost:8080/{name}-{profiles}.yml或 locahost:8080/{label}/{name}-{profiles}.yml
其中,name表示服务名,profiles环境,label分支(branch)默认为master

输入locahost:8080/release/order-dev.yml即可访问上述配置文件;

若无环境信息,则order-a或order-b.yml都可,但不能为空;

也可.json或.properties,则可自动转换格式显示在浏览器上;

若Git工程上yml文件格式错误则访问报错。

1.2 Config Client 的使用

  1. 在order服务项目中,并添加@EnableConfigClient并添加pom依赖,修改yml配置文件
spring:
  application:
    name: order #通过这两个找到自己的配置
  cloud:
    config:
      discovery:
        enabled: true
        service-id: CONFIG
      profile: dev  #通过这两个找到自己的配置

必须修改yml文件名为bootstrap.yml,否则系统自动寻找application.yml而报错,bootstrap.yml则可以引导系统从Git上pull相应配置

  1. 在controller中做测试,是否能找到上述yml文件的两个重要参数
@RestController
@RequestMapping("/env")
public class EnvController {
     

    @Value("${env}")
    private String env;

    @GetMapping("/print")
    public String print() {
     
        return env;
    }
}

启动项目,发现已获取远端git上的配置,项目正常运行

  1. 修改配置再测试

修改Eureka-Server的端口地址为8762,也修改Config和order远端git的注册地址为8762,发现启动报错,且只有config注册在了注册中心上,是由于order默认注册在8761注册中心上,其还未注册在注册中心8762上,就无法访问到config,从而无法pull到配置。

解决方法:如若不使用默认的8761地址,就将注册地址的配置写在bootstrap.yml

注意:上述两个重要参数起到的作用等用于locahost:8080/release/order-dev.yml,而如此访问的话config默认是将远端的order.yml与order-dev.yml合并后展示;一般将order-dev.yml、order-test.yml等公用部分放在order.yml中。

二、Spring Cloud Bus 自动更新配置

实现了Spring Cloud Bus组件和config组件的服务,在更新了远程配置后,会通过bus-refresh接口通知消息队列MQ,再由消息队列通知订阅的服务。

2.1 Spring Cloud Bus实操

1. 在config和order服务中添加pom依赖

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

启动后,可在eureka中看到注册的两个服务,可在MQ看到生成的两个消息队列

2. 实现bus-refresh接口

config服务的application.yml添加

management:
  endpoints:
    web:
      expose: "*"

修改远程order配置内容,然后访问localhost:8080/actuator/bus-refresh,config服务发布消息给消息队列(在MQ中的config队列中可看到一个向上的小三角)。

在order服务的测试配置的EnvController上添加@RefreshScope,即可看到更新后的配置内容。

3. 测试Spring Cloud Bus

在远程git上添加配置

girl:
	name: xxx
	age: 18

在order服务中新建GirlConfig类

@Data
@Component
@ConfigurationProperties("girl")
@RefreshScope
public class GirlConfig {
     

    private String name;

    private Integer age;
}

新建GirlController

@RestController
public class GirlController {
     

    @Autowired
    private GirlConfig girlConfig;

    @GetMapping("/girl/print")
    public String print() {
     
        return "name:" + girlConfig.getName() + " age:" + girlConfig.getAge();
    }
}

修改远程order配置内容,然后访问localhost:8080/actuator/bus-refresh,再访问localhost:8080/girl/print,即可看到更新后的内容。

2.2 WebHook自动触发

一般git管理工具都自带WebHook工具,将在push代码即更新的时候将自动触发bus-refresh接口,无须每次手动访问,真正实现全自动配置。

在GitHub上配置的路由是localhost:8080/monitor,其中可以用内网穿透工具nateapp,映射在本地网址,即http://5a38i8.natappfree.cc/monitor

你可能感兴趣的:(微服务,微服务,spring,cloud,config,spring,cloud,bus)