es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Java – Cómo propagar los encabezados a Spring OpenFeign

Tengo un microservicio que llama a varios microservicios en cascada, utilizando FeignClient (spring cloud). Quiero propagar todos los valores de cabecera entre ellos, sin declarar un atributo por valor de cabecera en el método Feign.

¿Hay alguna manera de hacer esto? No pude encontrar información al respecto en línea.

Muestra de la propagación de cabeceras que tengo:

void doSomething(Long id,
@Header(“Accept-Language”) String language,
@Header(“Accept”) accept,
@Header(“Authorization”) authorization,
@Header(“Connection”) connection, …)

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, existe una forma de propagar todos los valores de encabezado entre microservicios sin declarar un atributo por valor de encabezado en el método Feign. Puede utilizar la interfaz RequestInterceptor para interceptar la solicitud antes de enviarla y agregar los encabezados a la solicitud.

    Aquí hay un ejemplo:

    @Component
    public class FeignClientInterceptor implements RequestInterceptor {
    
        @Override
        public void apply(RequestTemplate requestTemplate) {
            ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
            if (attributes != null) {
                HttpServletRequest request = attributes.getRequest();
                Enumeration<string> headerNames = request.getHeaderNames();
                while (headerNames.hasMoreElements()) {
                    String headerName = headerNames.nextElement();
                    String headerValue = request.getHeader(headerName);
                    requestTemplate.header(headerName, headerValue);
                }
            }
        }
    }
    

    En este ejemplo, implementamos la interfaz RequestInterceptor y anulamos el método apply. En este método, obtenemos los atributos de la solicitud desde el RequestContextHolder e iteramos sobre los encabezados. Para cada encabezado, lo agregamos al RequestTemplate utilizando el método header.

    Finalmente, anotamos la clase FeignClientInterceptor con @Component para convertirla en un bean administrado por Spring, y se conectará automáticamente a los clientes Feign.

    Ahora, puede eliminar los parámetros de encabezado del método doSomething y se propagarán automáticamente entre los microservicios.

    void doSomething(Long id);
    

    Espero que esta solución ayude. Si tiene alguna pregunta adicional, no dude en preguntar.

Comments are closed.