Microservicios - Fegin

Cuando llamamos entre los dos servicios antes, usamos restTemplate, pero hay muchos problemas al llamar de esta manera

  String url = "http://userservice/user/" + order.getUserId();
  • Mala legibilidad del código y experiencia de codificación inconsistente
  • Las URL con parámetros complejos son difíciles de mantener

Así que lanzamos vigorosamente a nuestro protagonista hoy -- Fegin

       Feign es un cliente http declarativo, su función es ayudarnos a enviar solicitudes http con elegancia y resolver los problemas anteriores.

Definir y usar el cliente Fegin

1. Introducir dependencias

 <!--feign客户端依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

2. Agregue anotaciones a la clase de inicio del servicio A para habilitar la función de Figin

@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
@EnableFeignClients//Feign的客户端
public class OrderApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }
}

3. Escriba el cliente de Fingir:

@FeignClient(value = "userservice")
public interface UserClient {

    @GetMapping("/user/{id}")
    User findById(@PathVariable("id") Long id);
}

/*
基于SpringMVC的注解来声明远程调用的信息
服务名称:userservice
请求方式:GET
请求路径:/user/{id}
请求参数:Long id
返回值类型:User
*/

4. Use el cliente Fegin en lugar de RestTemplate


    @Autowired
    private UserClient userClient;

    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
        // 2.用Feign远程调用
        User user = userClient.findById(order.getUserId());
        // 3.封装user到Order
        order.setUser(user);
        // 4.返回
        return order;
    }

Pasos para usar Fegin :

  • Introducir dependencias
  • Agregue la anotación @EnableFeginClient
  • Escribir interfaz FeginClient
  • Use métodos definidos en FeginClient en lugar de RestTemplate

Personalice la configuración para anular la configuración predeterminada, que se puede modificar como:

tipo efecto ilustrar
fegin.Logger.Decodificador Modificar nivel de registro Contiene cuatro niveles diferentes: NINGUNO, BÁSICO, ENCABEZADOS, COMPLETO

fingir.códec.Decodificador

Analizador del resultado de la respuesta

Analizar los resultados de llamadas remotas http , como analizar cadenas json en objetos java

fingir.códec.codificador

codificación de parámetros de solicitud

Codifique los parámetros de solicitud para enviar a través de solicitudes http

fingir. Contrato

Formatos de anotación admitidos

El valor predeterminado es la anotación de SpringMVC.

fingir. reintentador

Mecanismo de reintento fallido

El mecanismo de reintento para falla de solicitud, el valor predeterminado es no, pero se usará el reintento de Ribbon

Personaliza la configuración de Fegin

En general, hay dos formas de configurar los registros de Fegin:

método uno:

1. Entra en vigor a nivel mundial:

feign:
  client:
    config: 
      default: #这里default就是全局变量,如果是写服务名称,则是针对某个微服务的配置
        loggerLevel: FULL #日志级别

2. Efecto parcial

feign:
  client:
    config: 
      userservice: #这里userseervice就是局部变量
        loggerLevel: FULL #日志级别

Método 2 (método de código Java):

public class DefaultFeignConfiguration {
    @Bean
    public Logger.Level logLevel(){
        return Logger.Level.BASIC;
    }
}

1. Si es una configuración global, póngala en la anotación @EnableFeginClients:

@EnableFeignClients(clients = UserClient.class,defaultConfiguration = DefaultFeign

2. Si es una configuración parcial, póngala en la anotación @FeginClient:

@FeignClient(value = "userservice",configuration = DefaultFeignConfiguration.class)

Optimización del rendimiento de Fegin

Implementación del cliente subyacente de Fegin:

  • URLConnection: implementación predeterminada, no es compatible con el grupo de conexiones
  • Apache HttpClient: grupo de conexiones de soporte
  • OKHttp: grupo de conexiones de soporte

La optimización del rendimiento de Fegin incluye principalmente:

  • Use un grupo de conexiones en lugar de la URLConnection predeterminada
  • Nivel de registro, preferiblemente básico o ninguno

Fegin agrega compatibilidad con FttpClient:

Dependencias de importación:

 <!--引入HttpClient依赖-->
        <dependency>
            <groupId>io.github.openfeign</groupId>
            <artifactId>feign-httpclient</artifactId>
        </dependency>

Configure el grupo de conexiones:

feign:
  client:
    config:
      default: #这里default就是全局变量,如果是写服务名称,则是针对某个微服务的配置
        loggerLevel: FULL #日志级别
  httpclient:
    enabled: true # 支持HttpClient的开关
    max-connections: 200 # 最大连接数
    max-connections-per-route: 50 # 单个路径的最大连接数

Mejores prácticas de Fegin

 

@EnableFeignClients(clients ="com.ffyc.fegin.clients")

       Si el cliente de Fegin se separa de acuerdo con el segundo método, estos clientes de Fegin no se pueden usar al iniciar el rango de paquetes de escaneo de SpringBootAppliaction, por lo que debemos resolver este problema.

Método 1 (especifique el paquete donde se encuentra FeginClient):

@EnableFeignClients(clients ="ffyc.com.fegin.clients")

Método 2 (especifique el código de bytes de FeginClient):

@EnableFeignClients(clients ={ UserClient.class})

Supongo que te gusta

Origin blog.csdn.net/dfdbb6b/article/details/132340949
Recomendado
Clasificación