1

在我当前版本的项目中,HttpClinet已用于创建请求。但是在请求的高峰期,我们的大部分 TCP 端口都处于等待状态,它们的状态在任务完成后保持大约 2 分钟事件。我读了一些关于IHttpClientFactory的文章。

但我不确定这个解决方案如何解决我们的问题。任何想法将不胜感激。

4

1 回答 1

2

那里有大量文章会告诉您为什么不应该处理 HttpClient (这会导致您提到的问题,并最终导致套接字耗尽问题),而是使用 IHttpClientFactory 来管理 HttpClient 的生命周期-相关服务。

这是因为每次使用 HttpClient 发出请求,并在使用后将其丢弃,都会导致套接字处于 TIME_WAIT 状态,想象一下如果您在几秒钟内发出数千个请求,您将用完套接字。IHttpClientFactory 是一个契约,用于更好地管理您的 Http 服务,并在您不必管理它的情况下重用连接池中的套接字。

首先,通过这个,我认为它提供了足够的信息。关于你想要达到的目标,

https://docs.microsoft.com/en-us/dotnet/architecture/microservices/implement-resilient-applications/use-httpclientfactory-to-implement-resilient-http-requests

上面文章中的关键点之一,回答您关于 IHttpClientFactory 如何解决您的问题的问题,

每次从 IHttpClientFactory 获取 HttpClient 对象时,都会返回一个新实例。但是每个 HttpClient 使用一个由 IHttpClientFactory 汇集和重用的 HttpMessageHandler 来减少资源消耗,只要 HttpMessageHandler 的生命周期没有过期。

希望这可以帮助!

于 2020-05-20T15:19:22.117 回答