日志

.NET Core HttpClientFactory+Consul实现服务发现

 来源    2020-05-23    1  

前言

  上篇文章.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源码地址找到了我们熟悉的名字

相关文章
.net core grpc consul 实现服务注册 服务发现 负载均衡(二)
日志在上一篇 .net core grpc 实现通信(一) 中,我们实现的grpc通信在.net core中的可行性,但要在微服务中真正使用,还缺少 服务注册,服务发现及负载均衡等,本篇我们将在 .net ...
.Net Core Grpc Consul 实现服务注册 服务发现 负载均衡
日志本文是基于..net core grpc consul 实现服务注册 服务发现 负载均衡(二)的,很多内容是直接复制过来的,..net core grpc consul 实现服务注册 服务发现 负载均 ...
1
Asp.net core 向Consul 注册服务
日志Consul服务发现的使用方法:1. 在每台电脑上都以Client Mode的方式运行一个Consul代理, 这个代理只负责与Consul Cluster高效地交换最新注册信息(不参与Leader的选 ...
1
ASP.NET Core 微服务初探[1]:服务发现之Consul
日志在传统单体架构中,由于应用动态性不强,不会频繁的更新和发布,也不会进行自动伸缩,我们通常将所有的服务地址都直接写在项目的配置文件中,发生变化时,手动改一下配置文件,也不会觉得有什么问题.但是在微服务模 ...
.NET Core微服务实施之Consul服务发现与治理
日志原文:.NET Core微服务实施之Consul服务发现与治理 Consul官网:https://www.consul.io Consul下载地址:https://www.consul.io/down ...
2
.net core微服务之基于Docker+Consul+Registrator服务注册服务发现
日志一.Docker部分: 先拉最新的asp.net core的镜像: docker pull microsoft/aspnetcore  将下载下来的镜像重命名,为什么要重命名?等会讲Registrat ...
1
(4)学习笔记 ) ASP.NET CORE微服务 Micro-Service ---- Consul服务发现和消费
日志上一章说了  Consul服务注册  现在我要连接上Consul里面的服务 请求它们的API接口 应该怎么做呢? 1.找Consul要一台你需要的服务器 1.1 获取Consul下的所有注册的服务 u ...
1
(转)微服务_.NET Core Consul服务发现与治理
日志         原文地址:https://www.cnblogs.com/waynechan/p/9354909.html Consul官网:https://www.consul.io Consul ...
1
.net core consul 服务配置 服务发现 服务健康检测 服务变更加载
日志准备环境  安装consul之后 1. 创建一个.net core webapi 举例为UsercenterService 2. nuget引用Consul组件  https://github.com ...
1
(4).NET CORE微服务 Micro-Service ---- Consul服务发现和消费
日志上一章说了  Consul服务注册  现在我要连接上Consul里面的服务 请求它们的API接口 应该怎么做呢? 1.找Consul要一台你需要的服务器 1.1 获取Consul下的所有注册的服务 u ...
.net core Ocelot Consul 实现API网关 服务注册 服务发现 负载均衡
日志大神张善友 分享过一篇 <.NET Core 在腾讯财付通的企业级应用开发实践>里面就是用.net core 和 Ocelot搭建的可扩展的高性能Api网关. Ocelot(http:// ...
2
java – Wildfly-Swarm Consul服务发现 – 无效的服务地址
问答我正在开发Wildfly-Swarm应用程序,我想使用Consul作为我的服务发现.所以我添加了topology-consul分数,在project-defaults.yml中设置了Consul路径, ...
1
ASP.NET Core结合Nacos来完成配置管理和服务发现
日志前言 今年4月份的时候,和平台组的同事一起调研了一下Nacos,也就在那个时候写了.net core版本的非官方版的SDK. 虽然公司内部由于某些原因最后没有真正的用起来,但很多人还是挺看好的.在和镇 ...
HttpClientFactory与Steeltoe结合来完成服务发现
日志前言 上一篇说了一下用HttpClientFactory实现了简单的熔断降级. 这篇就来简单说说用HttpClientFactory来实现服务发现.由于标题已经好明显的说了Steeltoe 因此这里会 ...
.NET Core微服务之基于Consul实现服务治理
日志Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.Consul基础介绍 Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置.与其他分布式服务注册与发 ...
.NET Core微服务之基于Consul实现服务治理(续)
日志Tip: 此篇已加入.NET Core微服务基础系列文章索引 上一篇发布之后,很多人点赞和评论,不胜惶恐,这一篇把上一篇没有弄到的东西补一下,也算是给各位前来询问的朋友的一些回复吧. 一.Consul ...
1
asp.net core系列 61 Ocelot 构建服务发现简单示例
日志一.概述 Ocelot允许指定服务发现提供程序,如Consul或Eureka. 这二个中间件是用来实现:服务治理或秒服务发现,服务发现查找Ocelot正在转发请求的下游服务的主机和端口.目前Ocelo ...
1
Consul初探-服务注册和发现
日志前言 经过上一篇的学习,现在已经来到了服务注册发现环节:Consul 的核心功能就是服务注册和发现,Consul 客户端通过将自己注册到 Consul 服务器集群,然后等待调用方去发现服务,实现代理转 ...
2
在Windows环境中使用Nginx, Consul, Consul Template搭建负载均衡和服务发现服务
日志搭建负载均衡和服务发现服务的目的 随着网站业务的不断提升,单个服务器的性能越来越难满足客户的业务需求,所以很多情况下,需要使用多服务器实例和负载均衡器来满足业务需要. Nginx 什么是Nginx N ...
2
Docker & Consul & Fabio & ASP.NET Core 2.0 微服务跨平台实践
日志相关博文: Ubuntu 简单安装 Docker Mac OS.Ubuntu 安装及使用 Consul Consul 服务注册与服务发现 Fabio 安装和简单使用 阅读目录: Docker 运行 C ...
1