Aplicación práctica de OpenFeign

La historia de desarrollo de OpenFeign

(时光轴懒得画了,文字描述一下,有兴趣的自行百度下)
1) Ribbon es una herramienta de equilibrio de carga basada en clientes HTTP y TCP. Puede configurar RibbonServerList (lista de servidores) en el cliente y usar HttpClient o RestTemplate para simular solicitudes http Los pasos son bastante engorrosos.
2) Fingir es una mejora basada en Ribbon, y es un cliente HTTP que es más conveniente de usar. Usando el método de interfaz, solo necesita crear una interfaz y luego agregarle anotaciones y definir los métodos de otros servicios que deben llamarse como métodos abstractos, sin la necesidad de construir solicitudes http usted mismo.
3) OpenFeign es que Spring Cloud admite anotaciones SpringMVC sobre la base de Feign, como @RequestMapping, etc. @FeignClient de OpenFeign puede analizar la interfaz bajo la anotación @RequestMapping de SpringMVC y generar una clase de implementación a través de un proxy dinámico, implementar el equilibrio de carga y llamar a otros servicios en la clase de implementación.

balanceo de carga

1) Equilibrio de carga centralizado
即在 consumer 和provider 之间使用独立的负载均衡设施(比如nginx等,通过某种策略转发给provider )
inserte la descripción de la imagen aquí
2) Equilibrio de carga en proceso
将负载均衡逻辑集成到consumer, consumer从注册中心获知有那些地址可以用,然后自己再从这些地址中选择出一个合适的 privider
inserte la descripción de la imagen aquí
3) ¿Cuál es la diferencia entre los dos?

  • Equilibrio de carga centralizado, hay un servidor de equilibrio de carga independiente desplegado entre el cliente y el servicio, que acepta solicitudes y las asigna a diferentes servicios.
  • Equilibrio de carga basado en procesos, integrando la lógica de equilibrio de carga en el consumidor. El consumidor aprende del centro de registro qué servicios están disponibles y luego utiliza el servicio de acuerdo con la estrategia de equilibrio de carga.

Tres elementos de OpenFeign

  • Centro de registro (Registro de interfaz de proxy)
  • Cliente (interfaz de llamada)
  • Proveedor de servicios (interfaz real)

Centro de Registro (proporcionado por nacos)

inserte la descripción de la imagen aquí

cliente

1) Definir la interfaz de servicio

  • Clase de interfaz ResourceFeignClient (@FeignClient y configuración fallbackFactory)
    inserte la descripción de la imagen aquí
  • Clase de implementación ResourceFeignClientFallback (FallbackFactory)inserte la descripción de la imagen aquí
  • Servicio dependiente
    inserte la descripción de la imagen aquí
    2) Proceso de proxy dinámico OpenFeign
    inserte la descripción de la imagen aquí

Servidor

(提供扫描接口所在包路径和接口发现注解)
inserte la descripción de la imagen aquí

Notas sobre llamadas de interfaz

  • 当参数比较复杂时,feign即使声明为get请求也会强行使用post请求(推荐均使用 post 请求方式);
  • 使用实体类进行传参时,请求方式不能为 Get ,若参数有其他类型变量时,则必须使用 @RequestBody;
  • 使用多个普通变量进行传参时,需配合@RequestParam进行使用,单个变量则不需要;
  • 当同时使用实体类和普通变量进行传参时,请求方和服务方的实体类都得使用 @RequestBody 注解,否则服务方的实体类无法接收请求方实体类参数值;
  • @RequestBody 和 @RequestParam 可以同时使用,但是请求方式必须是 post ;
  • 服务方使用实体类接收参数时,请求方可以定义该实体类内的各个变量,feign会将其一一映射,但必须使用 @RequestParam注解申明变量;

Supongo que te gusta

Origin blog.csdn.net/qq_23845083/article/details/129730414
Recomendado
Clasificación