IHttpClientFactory & Socket Exhaustion (Soket Tükenmesi)
Her istekte "new HttpClient()" yazarak sunucunun tüm TCP soketlerini tüketip çökertme hatasıdır.
Her telefon görüşmesi için gidip yeni bir telefon hattı ve SIM kart alıp konuşma bitince SIM kartı atmaya benzer. Bir süre sonra operatörde hat kalmaz (TIME_WAIT soketleri dolar).
HttpClient IDisposable uygulasa da dispose edildiğinde altındaki TCP soketi hemen serbest kalmaz, TIME_WAIT durumunda 2-4 dakika bekler. Yoğun trafikte tüm portlar tükenir (Socket Exhaustion). IHttpClientFactory HttpMessageHandler havuzunu yöneterek soketleri güvenle yeniden kullanır.
“HttpClient doğrudan new ile üretilirse soket tükenmesine (socket exhaustion), Singleton yapılırsa DNS değişikliklerini algılayamamaya yol açar. Çözüm, ASP.NET Core IHttpClientFactory kullanmaktır. Factory, alttaki handler havuzunu rotasyonla yönetir.”
// Program.cs
builder.Services.AddHttpClient<IWeatherService, WeatherService>(client => {
client.BaseAddress = new Uri("https://api.weather.com");
client.Timeout = TimeSpan.FromSeconds(5);
});
Her istek içinde "using var client = new HttpClient();" yazmak!