Registro y descubrimiento del servicio [Spring Cloud combat: Eureka]

Spring Cloud Eureka: registro y descubrimiento de servicios

Eureka es un producto de Netflix de código abierto que proporciona registro y descubrimiento de servicios y ofrece una implementación completa del registro de servicios y descubrimiento de servicios. También es uno de los componentes centrales más importantes del sistema SpringCloud.

Introducción de antecedentes

Los microservicios se implementan de forma independiente y tienen límites claros, y las funciones comerciales complejas se crean a través de llamadas remotas entre servicios.
Entonces, ¿por qué necesita consultar el registro y descubrimiento de servicios? ¿Cuáles son los problemas específicos que deben resolverse para el registro y el descubrimiento de servicios?

El registro y el descubrimiento del servicio resuelven principalmente los dos problemas importantes siguientes:

  • 1) Blindaje y desacoplamiento de los detalles de interdependencia entre servicios:
    • Sabemos que las llamadas remotas entre servicios deben conocer la IP y la información del puerto de cada uno. Podemos configurar directamente la IP y el puerto de la persona que llama en la persona que llama. De esta manera, la persona que llama depende directamente de la IP y el puerto tiene problemas obvios. Por ejemplo, después de la IP llamada y el cambio de puerto, el método de llamada debe modificarse sincrónicamente.
    • A través del descubrimiento de servicios, la dependencia de IP y puerto entre servicios se transforma en dependencia del nombre del servicio. El nombre del servicio se puede identificar de acuerdo con la empresa de microservicios. Por lo tanto, los detalles de dependencia entre los servicios de protección y desacoplamiento son el descubrimiento de servicios y la resolución de registros. primera pregunta.
  • 2) Gestión dinámica de microservicios:
    • En la arquitectura de microservicios, hay muchos servicios y la interdependencia entre los servicios también es compleja. Ya sea que el servicio se detenga activamente, se cuelgue inesperadamente o expanda la implementación del servicio debido al aumento del tráfico, se requieren cambios dinámicos en los datos o el estado del servicio. Se notifica al destinatario lo antes posible y, a continuación, el destinatario toma las medidas correspondientes. Por lo tanto, para el registro y descubrimiento del servicio, los datos y el estado del servicio deben administrarse en tiempo real, incluido el registro del servicio en línea, el servicio activo fuera de línea y la eliminación anormal del servicio.

Introducción a Eureka

Spring Cloud encapsula el módulo Eureka desarrollado por Netflix para implementar el registro y el descubrimiento de servicios. Eureka adopta la arquitectura de diseño de CS.

  • Eureka Server sirve como servidor para la función de registro del servicio y es el centro de registro del servicio. Otros microservicios del sistema utilizan el cliente de Eureka para conectarse al servidor Eureka y mantener una conexión de latido.
  • El personal de mantenimiento puede usar Eureka Server para monitorear si cada microservicio en el sistema está funcionando normalmente.
  • Algunos otros módulos de Spring Cloud (como Zuul) pueden usar Eureka Server para descubrir otros microservicios en el sistema y ejecutar la lógica relacionada.
  • Eureka consta de dos componentes: servidor Eureka y cliente Eureka. El servidor Eureka se utiliza como servidor de registro de servicios.
  • La estructura básica de Eureka consta de 3 roles:
    • 1. Eureka Server: proporciona registro y descubrimiento de servicios
    • 2. Proveedor de servicios: El proveedor de servicios registra su propio servicio en Eureka para poder encontrar otros servicios.
    • 3. Consumidor de servicios: El consumidor de servicios obtiene una lista de servicios registrados de Eureka, para que el servicio pueda consumirse.

Construir el centro de registro de Eureka

Creemos y ejecutemos el registro Eureka para ver la postura correcta para crear y ejecutar aplicaciones SpringCloud en IDEA.

  • Idea de herramienta de desarrollo
  • Java versión 1.8
  • SpringBoot versión 2.3.1.RELEASE
  • SpringCloud versión Hoxton.SR6

Utilice IDEA para crear aplicaciones SpringCloud

  • Es conveniente para aprender a crear un proyecto de aprendizaje en la nube, y el código fuente se colocará en GitHub en el futuro.
  • El proceso se muestra en la figura:
    Crear diagrama de flujo
  • En el proyecto que acaba de crear, cree un módulo eureka-learn y use Spring Initializer para inicializar un proyecto SpringBoot
  • El proceso se muestra en la figura:
    Crear diagrama de flujo
  • Abra el archivo pom.xml del módulo eureka-learn, encontrará que hay una dependencia adicional del servidor eureka
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
    
  • Simplemente agregue la anotación @EnableEurekaServer a la clase de inicio para habilitar la función del registro eureka
    @EnableEurekaServer
    @SpringBootApplication
    public class EurekaServiceApplication {
          
          
    
        public static void main(String[] args) {
          
          
            SpringApplication.run(EurekaServiceApplication.class, args);
        }
    }
    
  • Modifique el archivo de configuración application.yml, agregue la configuración relevante del registro eureka
    server:
      port: 8001 #指定运行端口
    spring:
      application:
        name: eureka-server #指定服务名称
    eureka:
      instance:
        hostname: localhost #指定主机地址
      client:
        fetch-registry: false #指定是否要从注册中心获取服务(注册中心不需要开启)
        register-with-eureka: false #指定是否要注册到注册中心(注册中心不需要开启)
      server:
        enable-self-preservation: false #关闭保护模式
    
  • Una vez completada la operación, visite la dirección http: // localhost: 8001 / para ver la interfaz del registro Eureka
  • como muestra la imagen:
    Mapa de página

Desarrolle el servicio al cliente de Eureka

  • Cree un nuevo módulo eureka-client en el proyecto y agregue las siguientes dependencias en pom.xml
    <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    
  • Agregar la anotación @EnableDiscoveryClient a la clase de inicio indica que es un cliente de Eureka
    @EnableDiscoveryClient
    @SpringBootApplication
    public class EurekaServiceClientApplication {
          
          
    
        public static void main(String[] args) {
          
          
            SpringApplication.run(EurekaServiceClientApplication.class, args);
        }
    }
    
  • Agregue la configuración relevante del cliente Eureka al archivo de configuración application.yml
    server:
      port: 8101 #运行端口号
    spring:
      application:
        name: eureka-client #服务名称
    eureka:
      client:
        register-with-eureka: true #注册到Eureka的注册中心
        fetch-registry: true #获取注册实例列表
        service-url:
          defaultZone: http://localhost:8001/eureka/ #配置注册中心地址
    
  • Consulte el centro de registro http: // localhost: 8001 / y descubra que el cliente de Eureka se ha registrado correctamente
  • como muestra la imagen:
    Representaciones registradas

Cree un registro Eureka con certificación

  • Cree un módulo eureka-security-server y agregue las siguientes dependencias en pom.xml
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
    
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    
  • Modificar el archivo de configuración application.yml
    server:
      port: 8004
    spring:
      application:
        name: eureka-security-server
      security: #配置SpringSecurity登录用户名和密码
        user:
          name: peter
          password: 20200314
    eureka:
      instance:
        hostname: localhost
      client:
        fetch-registry: false
        register-with-eureka: false
    
  • Debido a la introducción de la dependencia de seguridad de primavera, debe agregar la configuración de Java WebSecurityConfig
    @EnableWebSecurity
    public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
          
          
        @Override
        protected void configure(HttpSecurity http) throws Exception {
          
          
            http.csrf().ignoringAntMatchers("/eureka/**");
            super.configure(http);
        }
    }
    
  • Ejecute eureka-security-server, visite http: // localhost: 8004 y descubra que se requiere autenticación de inicio de sesión
  • como muestra la imagen
    Imagen que requiere autenticación de inicio de sesión

Eureka-client se registra en el centro de registro con autenticación de inicio de sesión

  • El formato de dirección del registro debe modificarse en el archivo de configuración
    http://${
          
          username}:${
          
          password}@${
          
          hostname}:${
          
          port}/eureka/
    
  • Agregue el archivo de configuración application-security.yml y modifique el nombre de usuario y la contraseña de acuerdo con el formato
    server:
      port: 8103
    spring:
      application:
        name: eureka-client
    eureka:
      client:
        register-with-eureka: true
        fetch-registry: true
        service-url:
          defaultZone: http://peter:20200314@localhost:8004/eureka/
    

Acerca de la configuración común de Eureka

  • La configuración es la siguiente:
    eureka:
      client:  #eureka客户端配置
        register-with-eureka: true  #是否将自己注册到eureka服务端上去
        fetch-registry: true #是否获取eureka服务端上注册的服务列表
        service-url:
          defaultZone: http://localhost:8001/eureka/ # 指定注册中心地址
        enabled: true # 启用eureka客户端
        registry-fetch-interval-seconds: 30 #定义去eureka服务端获取服务列表的时间间隔
      instance: #eureka客户端实例配置
        lease-renewal-interval-in-seconds: 30 #定义服务多久去注册中心续约
        lease-expiration-duration-in-seconds: 90 #定义服务多久不去续约认为服务失效
        metadata-map:
          zone: jiangsu #所在区域
        hostname: localhost #服务主机名称
        prefer-ip-address: false #是否优先使用ip来作为主机名
      server: #eureka服务端配置
        enable-self-preservation: false #关闭eureka服务端的保护机制
    

revisión

suponer

Dirección de origen del proyecto

Supongo que te gusta

Origin blog.csdn.net/Strive_Peter/article/details/113949635
Recomendado
Clasificación