Ruta de actualización de SpringCloud versión 2020.0.x -29.
Entre muchos microservicios nativos de la nube, los microservicios más pequeños pueden depender directamente del equilibrador de carga en el servicio de la nube para asignar nombres de dominio internos a los servicios y determinar el estado de salud de la instancia a través de la interfaz de verificación de estado. utilice OpenFeign para generar Feign Client para el nombre de dominio correspondiente. En el ecosistema Spring Cloud, OpenFeign se ha encapsulado y los componentes de Feign Client se han personalizado para integrar funciones de descubrimiento de servicios y equilibrio de carga en OpenFeign Client. Además de esto, también incorporamos el componente Resilience4J para permitir el aislamiento de subprocesos en el nivel de instancia de microservicio, así como disyuntores y reintentos en el nivel de método de microservicio.
Comencemos analizando Spring Cloud OpenFeign
Cualquier componente en Spring Cloud se implementa en base a Spring Boot. Dado que Spring Boot ya tiene un códec HTTP, puede considerar usar el códec HTTP de Spring Boot para implementar la interfaz del códec de OpenFeign en lugar de implementar un códec HTTP separado para OpenFeign.
La implementación predeterminada se proporciona en FeignClientsConfiguration:
Como se puede ver en el código fuente, el decodificador predeterminado es un decodificador encapsulado multicapa, que incluye:
Pase el objeto HttpMessageConverters de SpringDecoder, que es una colección de todos los HttpMessageConverters en spring-web. HttpMessageConverter es una herramienta en Spring-web para codificar y decodificar cuerpos de solicitud y respuesta HTTP. Su estructura de interfaz es la siguiente:
Spring Boot tiene muchos HttpMessageConverters integrados. También podemos implementar nuestro propio HttpMessageConverter para implementar un MediaType personalizado. Por ejemplo, definamos uno aquí:
<. p> Después de eso, similar al anterior, configúrelo como una configuración MVC compatible con Spring Boot:Escriba el controlador y pruébelo:
Utilice una herramienta como Postman para especificar el Encabezados de solicitud HTTP:
El cuerpo es:
Después de enviar la solicitud, ingresará la lectura de CustomizedHttpMessageConverter para analizarla en un objeto Student, y luego la escritura de CustomizedHttpMessageConverter también escriba el Estudiante en la respuesta en el Cuerpo de la respuesta.
Como puede ver, debido a la existencia de SpringEncoder, podemos reutilizar el HttpMessageConverter integrado de Spring o ampliarlo para personalizar nuestro propio HttpMessageConverter, que es. muy conveniente.
El código de ResponseEntityDecoder es relativamente simple y puede lograr el efecto de la clase encapsulada HttpEntity de Spring-web que ignora la respuesta HTTP al decodificar:
Esto en realidad es por compatibilidad con RestTemplate respuesta, que puede devolver HttpEntity. RestTemplate puede devolver una HttpEntity, pero el cuerpo devuelto por la solicitud HTTP subyacente en realidad no encapsula ese tipo.
De manera similar, la clase de encapsulación opcional en el JDK también necesita hacer lo mismo, lo que se puede lograr a través de OptionalDecoder.
El codificador SpringEncoder también es muy simple. Se basa en HttpMessageConverter en Spring, por lo que no entraremos en detalles.
El codificador SpringEncoder también es muy simple.