Requisitos: Em arquiteturas de microsserviços, chamadas entre serviços frequentemente usam o protocolo HTTP, geralmente usando a classe HttpClient para fazer requisições HTTP ou utilizá-laRefit.HttpClientFactory、WebApiClientCoreBibliotecas de terceiros baseadas em encapsulamento HttpClient.
Para mais informações sobre o uso do HttpClient, consulte a:O login do hiperlink está visível.
Código-fonte HttpClient:O login do hiperlink está visível.
No construtor sem parâmetros HttpClient, o objeto HttpClientHandler é instanciado por padrão, e o HttpClientHandler herda e implementa a classe abstrata HttpMessageHandler.Fluxo padrão: HttpClient -> HttpClientHandler -> SocketsHttpHandler -> ...
De acordo com análise do código-fonte, o objeto herdado do HttpMessageHandler é uma implementação concreta do HttpClient enviando requisições HTTP. O HttpClient vaiHttpRequestMessageO objeto é passado e então recebidoHttpResponseMessageObject retorna conteúdo.
Tente criar uma nova classe TestHttpHandler, herdar a classe de abstração HttpMessageHandler e implementar o método SendAsync, e então instancia-la no construtor HttpClient, com o seguinte código:
Como mostrado abaixo:
Embora chame o HttpClient para enviar uma requisição GET, a implementação específica do método SendAsync não envia uma requisição HTTP, e não há fluxo de rede, entãoVocê pode desconectar o cabo de rede e o programa funcionará normalmente。
emAo usar um objeto HttpClient, o socket subjacente não é liberado imediatamente, que pode causar problemas de exaustão do soquete. A Microsoft está ciente desse problema e recomenda o uso do IHttpClientFactory em ASP.NET projetos Core para criar objetos HttpClient.O IHttpClientFactory agrupa instâncias HttpMessageHandler criadas em fábrica em um pool para reduzir o consumo de recursos. Ao criar uma nova instância HttpClient, pode reutilizar a instância HttpMessageHandler no pool(se o período de sobrevivência não tiver expirado).
IHttpClientFactory para .NET:O login do hiperlink está visível.
ASP.NET Core tem o conceito de middleware pipeline,Na verdade, o HttpClient também possui o conceito de middleware pipeline com a ajuda do Delegating Handler, como mostrado na figura abaixo:
Ao usar esse recurso, podemos interceptar requisições e respostas, como aumentar a autenticação de token antes das requisições, registrar o tempo necessário para requisições e respostas, e envolver dados de resposta.
Basta herdar a classe DelegingHandler e sobrescrever o método SendAsync.
Gravar requisições HTTP leva tempo, e o código é o seguinte:
Ligue para o IHttpClientFactory para criar um HttpClient e enviar uma solicitação, como mostrado na imagem a seguir:
(Fim)
|