Requisitos: En las arquitecturas de microservicios, las llamadas entre servicios suelen usar el protocolo HTTP, normalmente empleando la clase HttpClient para realizar peticiones HTTP o utilizarloRefit.HttpClientFactory、WebApiClientCoreBibliotecas de terceros basadas en encapsulación HttpClient.
Para más información sobre el uso de HttpClient, por favor consulte:El inicio de sesión del hipervínculo es visible.
Código fuente HttpClient:El inicio de sesión del hipervínculo es visible.
En el constructor sin parámetros HttpClient, el objeto HttpClientHandler se instancia por defecto, y el HttpClientHandler hereda e implementa la clase abstracta HttpMessageHandler.Flujo por defecto: HttpClient -> HttpClientHandler -> SocketsHttpHandler -> ...
Según el análisis del código fuente, el objeto heredado del HttpMessageHandler es una implementación concreta del HttpClient que envía solicitudes HTTP. HttpClientHttpRequestMessageEl objeto se pasa y luego se recibeHttpResponseMessageEl objeto devuelve contenido.
Prueba a crear una nueva clase TestHttpHandler, heredar la clase de abstracción HttpMessageHandler e implementar el método SendAsync, y luego instanciarla en el constructor HttpClient, con el siguiente código:
Como se muestra a continuación:
Aunque llamar a HttpClient para enviar una solicitud GET, la implementación específica del método SendAsync no envía una solicitud HTTP y no hay flujo de red, por lo quePuedes desconectar el cable de red y el programa funcionará con normalidad。
enAl usar un objeto HttpClient, el socket subyacente no se libera inmediatamente, lo que puede causar problemas de agotamiento de la cavidad. Microsoft es consciente de este problema y recomienda usar IHttpClientFactory en ASP.NET proyectos Core para crear objetos HttpClient.IHttpClientFactory agrupa instancias HttpMessageHandler creadas en fábrica en un pool para reducir el consumo de recursos. Cuando creas una nueva instancia HttpClient, podrías reutilizar la instancia HttpMessageHandler en el pool(si el periodo de supervivencia no ha expirado).
IHttpClientFactory para .NET:El inicio de sesión del hipervínculo es visible.
ASP.NET Core tiene el concepto de middleware de pipeline,De hecho, HttpClient también tiene el concepto de middleware de pipeline con la ayuda del Gestor Delegado, como se muestra en la figura siguiente:
Al utilizar esta función, podemos interceptar solicitudes y respuestas, como aumentar la autenticación de tokens antes de las solicitudes, registrar el tiempo necesario para las solicitudes y respuestas, y envolver los datos de respuesta.
Solo tienes que heredar la clase DelegingHandler y sobrescribir el método SendAsync.
Grabar las solicitudes HTTP lleva tiempo, y el código es el siguiente:
Llama a IHttpClientFactory para crear un HttpClient y enviar una solicitud, como se muestra en la siguiente imagen:
(Fin)
|