Spring Cloud (7): fingir llamada de interfaz declarativa

1. ¿Qué es fingir?

Fingir también es para lograr el equilibrio de carga, pero su uso es más simplificado que el de Ribbon. En realidad, está encapsulado en base a Ribbon, por lo que podemos lograr el equilibrio de carga llamando a la interfaz. Tanto Feign como Ribbon son proporcionados por Netflix. Feign es un cliente de servicio web declarativo con plantilla, que simplifica la operación de los desarrolladores que escriben clientes de servicio web. Los desarrolladores pueden llamar a la API HTTP a través de interfaces y anotaciones simples. Simplifique y acelere el desarrollo. Spring Cloud Feign también es un desarrollo secundario basado en Netflix Feign, integra Ribbon e Hystrix y tiene una serie de funciones convenientes como conectable, basado en anotaciones, equilibrio de carga y fusión de servicios, es decir, podemos usar Feign en desarrollo real para reemplazar a Ribbon.
En comparación con Ribbon+RestTemplate, Feign simplifica enormemente el desarrollo de código. Feign admite múltiples anotaciones, incluidas anotaciones de Feign, anotaciones de JAX-RS, anotaciones de Spring MVC, etc. Spring Cloud optimiza Feign e integra Ribbon y Eureka, por lo que Feign es más cómodo de usar. .

2. La diferencia entre Ribbon y Fingir

Ribbon es una herramienta de cliente HTTP común y Fingir se implementa en base a Ribbon.

3. Ventajas de Fingir

1. Fingir es un cliente de servicio web declarativo.

2. Admite anotaciones de fingir, anotaciones de Spring MVC, anotaciones de JAX-RS

3. Fingir se implementa en base a Ribbon, que es más conveniente de usar

4. Fingir integra Hystrix y tiene la función de fusión de servicios

¡Cuatro, combate real!

  1. Cree un módulo y configure pom.xml de la siguiente manera:
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
	<version>2.0.2.RELEASE</version>
</dependency>

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-openfeign</artifactId>
	<version>2.0.2.RELEASE</version>
</dependency>
  1. Cree un archivo de configuración application.yml, la configuración es la siguiente:
server:
  port: 8050
spring:
  application:
    name: feign
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka
  instance:
    prefer-ip-address: true
  1. Cree una clase de inicio con el siguiente código:
package com.zing;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;

@SpringBootApplication
@EnableFeignClients
public class FeignApplication {
    
    
	public static void main(String[] args) throws Exception {
    
    
		SpringApplication.run(FeignApplication.class, args);
	}

}
注解说明:

    * @EnableFeignClients:声明其为 Feign 客户端
  1. Cree una interfaz declarativa, el código es el siguiente:
package com.zing.feign;

import java.util.Collection;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

import com.zing.entity.Student;

@FeignClient(value = "provider")
public interface IFeignService {
    
    
	
	@GetMapping("/student/findAll")
	public Collection<Student> findAll();
	
	@GetMapping("/student/index")
	public String index();
}

5. El código del controlador es el siguiente:

package com.zing.controller;

import java.util.Collection;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.zing.entity.Student;
import com.zing.feign.IFeignService;

@RestController
@RequestMapping("/feign")
public class FeignHandler {
    
    

	@Autowired
	private IFeignService feignservice;
	
	@GetMapping("/findAll")
	public Collection<Student> findAll(){
    
    
		return feignservice.findAll();
	}
	
	@GetMapping("/index")
	public String index() {
    
    
		return feignservice.index();
	}
	
}
  1. Pruebe la función de equilibrio de carga de fingir
    (1) inicie el centro de registro por separado, dos proveedores de servicios con puertos diferentes, finja, la página del centro de registro es la siguiente:
    inserte la descripción de la imagen aquí
    (2) visite http://localhost:8050/feign/index varias veces , podemos Ver que las dos direcciones de puerto aparecen alternativamente demuestra que Fingir ha logrado el equilibrio de carga. Como se muestra en la figura a continuación:
    inserte la descripción de la imagen aquí
    inserte la descripción de la imagen aquí
    7. Pruebe el mecanismo de fusible de Fingir
    (1) Primero detenemos a todos los proveedores de servicios, y solo mantenemos los servicios del centro de registro y Fingir, y abrimos el centro de registro como se muestra en la figura a continuación: ( 2
    inserte la descripción de la imagen aquí
    ) Visite http://localhost:8050 nuevamente /fingir/index Puede ver el contenido en la siguiente figura:
    inserte la descripción de la imagen aquí
    (3) Para no exponer directamente el mensaje de error, necesitamos agregar un mecanismo de fusible de servicio, modificar la aplicación. yml de la siguiente manera:
server:
  port: 8050
spring:
  application:
    name: feign
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka
  instance:
    prefer-ip-address: true
feign:
  hystrix:
    enabled: true

Instrucciones de configuración:

  • fingir.hystrix.enable: Ya sea para habilitar el mecanismo de fusible, el valor predeterminado es falso.

(4) Cree la clase de implementación FeignServiceImpl de IFeignService, defina el mecanismo de procesamiento tolerante a fallas en ella e inyecte la instancia de FeignServiceImpl en el contenedor IOC a través de la anotación @Component. El código es el siguiente:

package com.zing.feign.impl;

import java.util.Collection;

import org.springframework.stereotype.Component;

import com.zing.entity.Student;
import com.zing.feign.IFeignService;

@Component
public class FeignServiceImpl implements IFeignService{
    
    

	@Override
	public Collection<Student> findAll() {
    
    
		return null;
	}

	@Override
	public String index() {
    
    
		return "服务器维护中。。。";
	}

}

(5) Defina el atributo alternativo de @FeignClient en la definición de interfaz de IFeignService para el procesamiento de degradación, configure la asignación y asigne a FeignServiceImpl. Después de modificar IFeignService, el código es el siguiente:

package com.zing.feign;

import java.util.Collection;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

import com.zing.entity.Student;
import com.zing.feign.impl.FeignServiceImpl;

@FeignClient(value = "provider",fallback = FeignServiceImpl.class)
public interface IFeignService {
    
    
	
	@GetMapping("/student/findAll")
	public Collection<Student> findAll();
	
	@GetMapping("/student/index")
	public String index();
}

(6) Repita los pasos (1) y (2) y aparecerá la siguiente interfaz, que prueba que el mecanismo del fusible de servicio funciona. Como se muestra en la imagen:
inserte la descripción de la imagen aquí

V. Resumen

En este código, usamos Fingir para lograr el equilibrio de carga y la fusión de servicios. Después de comprender la configuración de Fingir y los principios básicos de su uso, estudiemos detenidamente el mecanismo de tolerancia a fallas de Hystix. Esperemos con ansias el próximo artículo Spring Cloud (8): Mecanismo de tolerancia a fallos de Hystix .

Un ingeniero de desarrollo también está en la etapa de aprendizaje continuo, y las pequeñas experiencias habituales se comparten de vez en cuando. Espero que quienes lean el texto que escribí puedan evitar desvíos y les deseo éxito en el trabajo y el estudio.
Los bloggers tienen una experiencia limitada, si hay alguna deficiencia, bienvenidos a comunicarnos y mejorar juntos ~ Espero progresar junto con ustedes que también están en CSDN.

Autor | Sweet Little Sweet Potato
Producido | Little Sweet Potato

Supongo que te gusta

Origin blog.csdn.net/qq_36836370/article/details/130901115
Recomendado
Clasificación