Spring Cloud Config es una solución de gestión de configuración distribuida, que incluye el lado del servidor y el lado del cliente.
Tabla de contenido
Introducción a la configuración
- Lado del servidor : proporciona almacenamiento de archivos de configuración, proporciona el contenido de los archivos de configuración en forma de interfaces y
@EnableConfigServer
los incrusta en aplicaciones de arranque Spring mediante el uso de anotaciones.
- Las reglas de nomenclatura son las siguientes:
{application}-{profile}.yml
o{application}-{profile}.properties
donde
aplicación es el nombre de la aplicación y perfil se refiere al entorno (se utiliza para distinguir el entorno de desarrollo, el entorno de prueba, el entorno de producción, etc.)
- Cliente : obtiene datos de configuración a través de la interfaz e inicializa su propia aplicación.
Construir servidor de configuración
- Cree un nuevo almacén público y cree un nuevo archivo de configuración en el producto gitee
m-service-resume-dev.yml
server:
port: 8080
spring:
application:
name: m-service-resume
#注册发现
eureka:
client:
service-url:
defaultZone: http://CloudEurekaServerA:8761/eureka,http://CloudEurekaServerB:8762/eureka
# 每隔多久拉取⼀次服务列表
registry-fetch-interval-seconds: 30
instance:
#显示ip
prefer-ip-address: true
# 192.168.28.22:m-service-autodeliver:8090:1.0-SNAPSHOT
instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}:@project.version@
#元数据
metadata-map:
A: A1
B: A1
# 租约续约间隔时间,默认30秒
lease-renewal-interval-in-seconds: 30
# 租约到期,服务时效时间,默认值90秒,服务超过90秒没有发⽣⼼跳,EurekaServer会将服务从列表移除
lease-expiration-duration-in-seconds: 90
my:
test:
num: 100
- Módulo de construcción
m-cloud-config-server
- Importar dependencias
<!--eureka client 客户端依赖引⼊-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!--config配置中⼼服务端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
- clase de inicio
@SpringBootApplication
@EnableDiscoveryClient
@EnableConfigServer //开启Config配置
public class McloudConfigServer {
public static void main(String[] args) {
SpringApplication.run(McloudConfigServer.class,args);
}
}
- Archivo de configuración aplicación.yml
- Agregar configuración de configuración
spring:
cloud:
config:
server:
git:
uri: https://gitee.com/vipMygz/m-cloud-config-server.git
username: XXXXXX
password: XXXXXX
search-paths:
- m-cloud-config-server
label: master
server:
port: 9006
spring:
application:
name: m-cloud-config-server
cloud:
config:
server:
git:
uri: https://gitee.com/vipMygz/m-cloud-config-server.git
username: XXXXXX
password: XXXXXX
search-paths:
- m-cloud-config-server
label: master
#注册发现
eureka:
client:
service-url:
defaultZone: http://CloudEurekaServerA:8761/eureka,http://CloudEurekaServerB:8762/eureka
# 每隔多久拉取⼀次服务列表
registry-fetch-interval-seconds: 30
instance:
prefer-ip-address: true
instance-id: ${
spring.cloud.client.ip-address}:${
spring.application.name}:${
server.port}:@project.version@
# 租约续约间隔时间,默认30秒
lease-renewal-interval-in-seconds: 30
# 租约到期,服务时效时间,默认值90秒,服务超过90秒没有发⽣⼼跳,EurekaServer会将服务从列表移除
lease-expiration-duration-in-seconds: 90
-
Inicie el servicio de configuración
-
Verifique la configuración de acceso http://localhost:9006/master/m-service-resume-dev.yml
Transformación del cliente
? ? ? Como es el centro de configuración, registramos el servicio al cliente en el centro Eureka y colocamos esa parte de la configuración en el centro de configuración. Echa un vistazo al efecto.
- Transformación
m-service-resume-8080
- Introducir dependencias
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
</dependency>
- Configurar la configuración del cliente
spring:
cloud:
config:
uri: http://localhost:9006/
name: m-service-resume
profile: dev
label: master
- Modifique application.yml al archivo de configuración bootstrap.yml
server:
port: 8080
spring:
application:
name: m-service-resume
cloud:
config:
uri: http://localhost:9006/
name: m-service-resume
profile: dev
label: master
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8 &serverTimezone=UTC
username: root
password: root
jpa:
database: MySQL
show-sql: true
hibernate:
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl #避免将驼峰命名转换为下划线命名
- Iniciar
m-service-resume-8080
y observar el centro de registro.
- Observe el centro de registro.
El registro fue exitoso, pero hubo un problema. Algunas de nuestras configuraciones no surtieron efecto. No se muestra ninguna IP. Encontramos que la configuración
y los resultados obtenidos por el servicio de configuración de configuración están ordenados alfabéticamente por ABCD.
Este no es el foco del problema, el problema debería ser que algunas configuraciones no surten efecto.
Actualización manual de configuración
pregunta
- El servicio al cliente agrega un controlador para obtener my.test.num
@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {
@Value("${my.test.num}")
private String myTest;
@GetMapping("/viewconfig")
public String viewconfig() {
return "msg==>" + myTest + " num=>" + myTest;
}
}
- Modifique el número de configuración de gitee a 200 y descubra que el cliente no está
没有获取到最新的配置
Configurar la actualización manual
- Agregar configuración
management:
endpoints:
web:
exposure:
include: refresh
##### 或者
management:
endpoints:
web:
exposure:
include: "*"
-
Cliente Agregar a la clase utilizada por el cliente para configurar la información.
@RefreshScope
-
Inicie manualmente una solicitud POST al Cliente, http://localhost:8080/actuator/refresh , para actualizar la información de configuración
-
Reinicie el servicio y acceda a la interfaz
. Nota: El método de actualización manual evita el reinicio del servicio (proceso: cambio de configuración de Git -> el script de bucle for actualiza manualmente cada microservicio)
Actualización automática de la configuración de configuración
En la arquitectura de microservicio, podemos combinar el bus de mensajes (Bus) para realizar una actualización automática de la configuración distribuida (Spring CloudConfig + Spring Cloud Bus) para lograr una notificación que surta efecto en todas partes.
Spring Cloud Bus (basado en MQ, compatible con RabbitMq/Kafka) es la solución de bus de mensajes en Spring Cloud. La
combinación de Spring Cloud Config + Spring Cloud Bus puede realizar la actualización automática de la información de configuración.
- El servidor Config Server agrega soporte para bus de mensajes
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
- ConfigServerAgregar configuración
spring:
rabbitmq:
host: 127.0.0.1
port: 5672
username: guest
password: guest
- Puerto expuesto de microservicio
management:
endpoints:
web:
exposure:
include: bus-refresh
# 暴露端口
management:
endpoints:
web:
exposure:
include: "*"
- Reinicie cada servicio, cambie la configuración y envíe una solicitud de publicación al servidor del centro de configuración.
http://localhost:9003/actuator/bus-refresh //各个客户端配置即可⾃动刷新
http://localhost:9006/actuator/bus-refresh/m-service-resume:8081 //定向刷新