Reaproveitamento dos pools de conexões, reduzindo o consumo de recursos do socket, este é o resumo da utilização do HttpClientFactory no .NET.
Introdução
Não saber utilizar corretamente o HttpClient no .NET é um erro clássico, como criar várias instâncias no projeto, isso causa um acúmulo de utilização de sockets, aumentando o consumo de processamento e o famoso memory leak.
A criação de uma instância HttpClient cria internamente uma cadeia HttpMessageHandler, que é responsável por estabelecer uma conexão. Portanto, quando descartamos o HttpClient, na verdade descartamos o HttpMessageHandler, que acabará fechando a conexão. O risco é que a conexão não seja fechada assim que o cliente for descartado.

Uma solução para o problema acima era ter uma única instância de um HttpClient que seria compartilhada em toda aplicação.
Mas, o problema em utilizar uma única instância na solução é que as conexões seriam mantidas abertas e reutilizadas para sempre e quaisquer alterações de DNS feitas nos serviços remotos não seriam respeitadas.
Isso faria com que a aplicação apontassem para instâncias de servidor offline ou ambientes incorretos.
Apresentando a HttpClientFactory
- O HttpClientFactory foi introduzido com .NET Core 2.1.
- O HttpClientFactory nos dá um local central para configurar e criar HttpClients.
- Ele gerencia o tempo de vida das cadeias HttpMessageHandler subjacentes. Ele faz isso gerenciando um pool desses MessageHandlers e mantendo-os abertos até que expirem.
- Os MessageHandlers são mantidos ativos por no máximo 2 minutos.
- O uso é simples e requer mudanças mínimas de código em sua aplicação.
- Apenas chamar o método de extensão AddHttpClient no IServiceCollection oferece as vantagens do gerenciamento de instâncias pronto para uso.
- Ele permite que você injete o HttpClientFactory em qualquer lugar da sua aplicação.
Exemplo de utilização do HttpClientFactory
O código abaixo é um exemplo de utilização do HttpClientFactory com o Polly, onde trabalharemos a resiliência.
Depois de ser registrado em seu startup.cs, agora precisamos consumir este HttpClient, conforme o código de exemplo abaixo:
Repare que nenhuma instância do HttpClient foi criado, simplesmente é reutilizado da nossa configuração no startup.cs, o que deixa seu código muito mais performático e organizado.
O exemplo completo de utilização do HttpClientFactory com o Polly, você confere no link abaixo: