Caso de proyecto típico 3——Fegin llama al 404

1: Introducción de fondo

Arpro ha implementado dos servidores para la carga de producción. Ambos usan el mismo espacio de nombres nacos.
Solo uno fue actualizado. Como resultado, la solicitud fue a la que no estaba actualizada, por lo que ocurrió un problema 404.
inserte la descripción de la imagen aquí

2. Introducción básica de OpenFeign

OpenFeign es la encapsulación secundaria de Spring Cloud de Feign, que admite anotaciones Spring MVC sobre la base de Feign. @FeignClient de OpenFeign puede analizar @RequestMapping @GetMapping y @PostMapping de Spring MVC, etc.

cómo utilizar

  1. Agregue @EnableFeignClients a la clase de inicio, escanee la interfaz anotada con @FeignClient y regístrela en el contenedor de primavera.
    2. Para usar, solo necesitamos crear una interfaz y agregar la anotación @FeignClient a la interfaz. Esta anotación analizará la interfaz bajo la anotación @RequestMapping y generará una clase de implementación a través de un proxy dinámico para lograr el equilibrio de carga y la invocación del servicio.

Preparación ambiental

inserte la descripción de la imagen aquí

Prepare un proyecto de Spring Cloud, incluido un consumidor, un proveedor de servicios, utilizando nacos como un centro de descubrimiento y configuración de servicios.

inserte la descripción de la imagen aquí

estructura del proyecto

proveedor

bootstrap.yml
inserte la descripción de la imagen aquí

clase de inicio

@EnableDiscoveryClient
@SpringBootApplication
public class TestFeignApplication {
    
    
    public static void main(String[] args) {
    
    
        SpringApplication.run(TestFeignApplication.class, args);
    }
}

Clase de controlador de usuario

@RestController
@RequestMapping("/user")
public class UserController {
    
    
    @GetMapping("/get")
    public String findAll() {
    
    
        return "服务调用成功";
    }

}

invocador

bootstrap.yml

inserte la descripción de la imagen aquí

clase de inicio

@SpringBootApplication
@EnableDiscoveryClient
//扫描标有@FeignClient的接口
@EnableFeignClients("com.ctsi.sddx.feign")
public class NacosApplication {
    
    
    public static void main(String[] args) {
    
    
        SpringApplication.run(NacosApplication.class, args);
    }

}

Fingir interfaz

@FeignClient(value = "arpro-provider-one")//value为Feign调用的服务名,也是注册到nacos中的服务名
public interface UserFeign {
    
    

    @GetMapping("user/get")
    String findAll();
}

Clase de controlador de usuario

@RestController
@RequestMapping("/user")
public class UserController {
    
    


    @Resource
    private UserFeign userFegin;

    @PostMapping("feign")
    public String getDeviceListByPage() {
    
    
        return userFegin.findAll();
    }
    
}

ejecutar proyecto

Inicie el servicio de invocador y el servicio de proveedor y observe si los servicios se registran correctamente en nacos.
Bajo el espacio de nombres arpro, podemos ver que ambos servicios se han registrado correctamente.
inserte la descripción de la imagen aquí
El servicio Invoker llama al método findAll() en el servicio Provider
y se puede ver que la llamada OpenFeign es exitosa. Esta es la aplicación más básica de OpenFeign, ¿no es muy simple?
inserte la descripción de la imagen aquí

Tres: La reproducción de la llamada fingida 404

Una vez que nos familiaricemos con el uso básico de OpenFeign, volvemos al tema de la producción de arpro e implementamos dos servidores para la carga. Ambos usan el mismo espacio de nombres nacos.
Solo uno fue actualizado. Como resultado, la solicitud fue a la que no estaba actualizada, por lo que ocurrió un problema 404.

Para reproducir el problema, primero necesitamos dos conjuntos de aplicaciones. He preparado dos programas, test-feign-2 y test-feign-5, que son completamente consistentes en el código e inconsistentes en el número de puerto de servicio.
Primero, necesitamos registrar ambos conjuntos de aplicaciones en nacos. Entonces habrá un total de dos servicios de consumo y dos servicios de proveedor.

Puede ver que se han registrado hasta ahora, dos instancias de consumidor y dos instancias de proveedor.
inserte la descripción de la imagen aquí

Hacer llamadas OpenFeign

Si un consumidor que iniciamos llama a OpenFeign, se equilibrará la carga por nacos y se distribuirá según el peso, es decir, se puede llamar a ambos proveedores. Si la versión del código de uno de los proveedores está detrás del otro proveedor (por ejemplo, no hay una interfaz correspondiente), aparecerá, y si se solicita el proveedor cuyo código está detrás, aparecerá un problema 404. Ahora vamos a simular.

Primero mire los pesos de los dos proveedores de servicios. Puede ver que los pesos de los servicios son ambos 1. En este caso, se llaman en promedio. Si se llaman 4 veces, cada uno de los dos proveedores se llama dos veces, y hay una relación de secuencia Llame al primero Uno, luego al segundo, y al primero, y al segundo.

inserte la descripción de la imagen aquí

Modificar el código de UserController cuyo número de puerto es 9009

Comente el método findAll() y reinicie el servicio

@RestController
@RequestMapping("/user")
public class UserController {
    
    
//    @GetMapping("/get")
//    public String findAll() {
    
    
//        return "服务调用成功";
//    }

}

realizar pruebas

El consumidor realiza una llamada OpenFeign.
La primera llamada exitosa es el servicio del proveedor con el código correcto.
inserte la descripción de la imagen aquí
La segunda llamada falla y se usa el servicio del proveedor con el código comentado.

Problema 404 reproducido con éxito
inserte la descripción de la imagen aquí

Cuatro: Resumen

  1. Tienes que estar asombrado del entorno de producción.
  2. Para la producción de códigos en los dos ambientes, se requiere un estricto sistema de proceso para asegurar
  3. Se requiere retroalimentación de circuito cerrado, como verificación de prueba.
    Medios técnicos:
  4. Dado que los códigos de los dos entornos son consistentes, ¿pueden compilarse de manera uniforme y luego enviarse a sus respectivos servidores? Esto debe hacerse en el siguiente paso, utilizando la automatización para mejorar la tolerancia a fallas, como el uso de jenkins (construcción unificada y envío a los servidores respectivos)
  5. Para el uso de OpenFeign, este blog solo menciona aplicaciones simples, como el registro de fusibles de procesamiento de tiempo de espera de OpenFeign , que no se menciona.

Cinco: sublimación

  1. La producción no es un asunto menor, y uno debe admirar el entorno de producción.
  2. Podemos tener una variedad de formas de tratar el problema, desde la perspectiva del sistema de proceso y los medios técnicos.
  3. Lo que siempre he aprendido en los blogs es que la finalización es más importante que la perfección. Complete las tareas establecidas dentro del tiempo especificado y amplíe cuando haya tiempo libre.

Supongo que te gusta

Origin blog.csdn.net/wangwei021933/article/details/129582038
Recomendado
Clasificación