Exigences : Dans les architectures microservices, les appels entre services utilisent souvent le protocole HTTP, généralement la classe HttpClient pour effectuer des requêtes HTTP ou l’utiliserRefit.HttpClientFactory、WebApiClientCoreBibliothèques tierces basées sur l’encapsulation HttpClient.
Pour plus d’informations sur l’utilisation d’HttpClient, veuillez consulter :La connexion hyperlientérée est visible.
Code source HttpClient :La connexion hyperlientérée est visible.
Dans le constructeur sans paramètres HttpClient, l’objet HttpClientHandler est instancié par défaut, et le HttpClientHandler hérite et implémente la classe abstraite HttpMessageHandler.Flux par défaut : HttpClient -> HttpClientHandler -> SocketsHttpHandler -> ...
Selon l’analyse du code source, l’objet hérité du HttpMessageHandler est une implémentation concrète du HttpClient envoyant des requêtes HTTP. HttpClient le feraHttpRequestMessageL’objet est transmis puis reçuHttpResponseMessageObject renvoie le contenu.
Essayez de créer une nouvelle classe TestHttpHandler, d’hériter de la classe d’abstraction HttpMessageHandler et d’implémenter la méthode SendAsync, puis de l’instanciar dans le constructeur HttpClient, avec le code suivant :
Comme montré ci-dessous :
Bien qu’appelant HttpClient pour envoyer une requête GET, l’implémentation spécifique de la méthode SendAsync n’envoie pas de requête HTTP, et il n’y a pas de flux réseau, doncVous pouvez débrancher le câble réseau et le programme fonctionnera normalement。
àLors de l’utilisation d’un objet HttpClient, le socket sous-jacent n’est pas immédiatement libéré, ce qui peut causer des problèmes d’épuisement de la douille. Microsoft est conscient de ce problème et recommande d’utiliser IHttpClientFactory dans ASP.NET projets Core pour créer des objets HttpClient.IHttpClientFactory regroupe les instances HttpMessageHandler créées en usine dans un pool afin de réduire la consommation de ressources. Lorsque vous créez une nouvelle instance HttpClient, vous pouvez réutiliser l’instance HttpMessageHandler dans le pool(si la période de survie n’est pas expirée).
IHttpClientFactory pour .NET :La connexion hyperlientérée est visible.
ASP.NET Core a le concept de middleware pipeline,En fait, HttpClient propose aussi le concept de middleware pipeline avec l’aide du gestionnaire délégué, comme montré dans la figure ci-dessous :
Grâce à cette fonctionnalité, nous pouvons intercepter les requêtes et réponses, telles que l’augmentation de l’authentification par jeton avant les requêtes, l’enregistrement du temps nécessaire pour les requêtes et réponses, et l’enveloppement des données de réponse.
Il suffit d’hériter de la classe DelegatingHandler et de remplacer la méthode SendAsync.
L’enregistrement des requêtes HTTP prend du temps, et le code est le suivant :
Appelez IHttpClientFactory pour créer un HttpClient et envoyez une requête, comme montré sur l’image suivante :
(Fin)
|