前言

  上篇文章.NET Core HttpClient+Consul实现服务发现提到过,HttpClient存在套接字延迟释放的问题,高并发情况导致端口号被耗尽引起服务器拒绝服务的问题。好在微软意识到了这个问题,从.NET Core 2.1版本开始推出了HttpClientFactory来弥补这个问题。关于更详细的HttpClientFactory介绍可以查看微软官方文档 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-requests?view=aspnetcore-3.1#httpclient-and-lifetime-management 我们了解到想把自定义的HttpMessageHandler注入到HttpClient内部,必须要通过构造函数。接下来我们就慢慢发觉如何给HttpClientFactory使用我们自定义的Handler。

HttpClient的创建

  相信大家都已经清楚使用HttpClientFactory从services.AddHttpClient()注入相关类开始,我们就从这里开始入手。先贴上源码地址HttpClientFactoryServiceCollectionExtensions源码然后我们大概的看一下我们关注的实现方法,大致如下,代码有删减

/// <summary>
/// Adds the <see cref="IHttpClientFactory"/> and related services to the <see cref="IServiceCollection"/>.
/// </summary>
/// <param name="services">The <see cref="IServiceCollection"/>.</param>
/// <returns>The <see cref="IServiceCollection"/>.</returns>
public static IServiceCollection AddHttpClient(this IServiceCollection services)
{
    if (services == null)
    {
        throw new ArgumentNullException(nameof(services));
    }

    .....

    //
    // Core abstractions
    //
    services.TryAddTransient<HttpMessageHandlerBuilder, DefaultHttpMessageHandlerBuilder>();
    services.TryAddSingleton<DefaultHttpClientFactory>();
    services.TryAddSingleton<IHttpClientFactory>(serviceProvider => serviceProvider.GetRequiredService<DefaultHttpClientFactory>());
    services.TryAddSingleton<IHttpMessageHandlerFactory>(serviceProvider => serviceProvider.GetRequiredService<DefaultHttpClientFactory>());

    .....

    return services;
}

通过源码我们可以看到IHttpClientFactory的实现类注入其实是DefaultHttpClientFactory,拿我们继续顺着源码继续查找DefaultHttpClientFactory源码地址找到了我们熟悉的名字

内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/wucy/p/12941322.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!