[8] Componente de configuración de Spring Cloud

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.

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
    @EnableConfigServerlos incrusta en aplicaciones de arranque Spring mediante el uso de anotaciones.
  1. Las reglas de nomenclatura son las siguientes: {application}-{profile}.ymlo {application}-{profile}.propertiesdonde
    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.

Insertar descripción de la imagen aquí

Construir servidor de configuración

Insertar descripción de la imagen aquí

  1. Cree un nuevo almacén público y cree un nuevo archivo de configuración en el producto giteem-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
  1. Módulo de construcciónm-cloud-config-server
  2. 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>
  1. clase de inicio
@SpringBootApplication
@EnableDiscoveryClient
@EnableConfigServer //开启Config配置
public class McloudConfigServer {
    
    
    public static void main(String[] args) {
    
    
        SpringApplication.run(McloudConfigServer.class,args);
    }
}

  1. 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
  1. Inicie el servicio de configuración
    Insertar descripción de la imagen aquí

  2. Verifique la configuración de acceso http://localhost:9006/master/m-service-resume-dev.yml

    Insertar descripción de la imagen aquí

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.

  1. Transformaciónm-service-resume-8080
  2. 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
  1. 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  #避免将驼峰命名转换为下划线命名

  1. Iniciar m-service-resume-8080y observar el centro de registro.
    Insertar descripción de la imagen aquí
  2. Observe el centro de registro.
    Insertar descripción de la imagen aquí
    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
    Insertar descripción de la imagen aquí
    y los resultados obtenidos por el servicio de configuración de configuración están ordenados alfabéticamente por ABCD.
    Insertar descripción de la imagen aquí
    Este no es el foco del problema, el problema debería ser que algunas configuraciones no surten efecto.
    Insertar descripción de la imagen aquí

Actualización manual de configuración

pregunta

  1. 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á没有获取到最新的配置
    Insertar descripción de la imagen aquí

Configurar la actualización manual

  1. Agregar configuración
management:
 endpoints:
 web:
 exposure:
 include: refresh

##### 或者
management:
 endpoints:
 web:
 exposure:
 include: "*"
  1. Cliente Agregar a la clase utilizada por el cliente para configurar la información.@RefreshScope

  2. Inicie manualmente una solicitud POST al Cliente, http://localhost:8080/actuator/refresh , para actualizar la información de configuraciónInsertar descripción de la imagen aquí

  3. Reinicie el servicio y acceda a la interfaz
    Descripción de la imagen aquí
    . 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.

  1. El servidor Config Server agrega soporte para bus de mensajes
 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
 </dependency>
  1. ConfigServerAgregar configuración
spring:
 rabbitmq:
  host: 127.0.0.1
  port: 5672
  username: guest
  password: guest
  1. Puerto expuesto de microservicio
management:
  endpoints:
    web:
      exposure:
        include: bus-refresh

# 暴露端口
management:
  endpoints:
    web:
      exposure:
        include: "*"
  1. 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  //定向刷新

Supongo que te gusta

Origin blog.csdn.net/u014535922/article/details/129998666
Recomendado
Clasificación