c# - 通过 DI 注入到 ServiceBusTrigger Azure 函数中的 IHttpClientFactory 是否为每个触发器重用或重新创建?
问题描述
我有一个带有一个 ServiceBusTrigger 的 Azure Function 项目。随着消息被添加到服务总线队列中,这可能会在短时间内迅速触发。据我了解,当将 IHttpClientFactory 注入 Azure Functions 项目时,工厂将暂时添加,即我的理解是每个函数执行一次。
据我从文档中可以看出,这并不理想 - 对于这样的函数,我当然希望每次触发函数方法时都可以重用一个 HttpClientFactory,然后通过 httpClientFactory.CreateClient() 创建 HttpClients,对吗?恐怕通过 DI 暂时添加 IHttpClientFactories,它们将各自使用自己的连接池,进而可能会淹没连接限制。
谁能告诉我我是否理解正确,如果理解正确,我该怎么做才能解决这个问题?
提前致谢。
解决方案
IHttpClientFactory
添加时被注册为单例, services.AddHttpClient()
因此它被共享而不是每次都重新创建。在此处检查代码
关于HttpClient
对象创建 - 查看 Microsoft 的文档 -此处
问题不在于 HttpClient 本身,而在于 HttpClient 的默认构造函数,因为它创建了一个新的具体实例HttpMessageHandler
,该实例存在套接字耗尽和 DNS 更改问题。
为了解决上述问题并使HttpClient
实例易于管理,.NET Core 2.1 引入了IHttpClientFactory
可用于HttpClient
通过依赖注入 (DI) 在应用程序中配置和创建实例的接口,该接口管理生命周期HttpMessageHandler
以避免上述问题/问题在管理生命周期时可能会发生HttpClient
。
在内部,每次HttpClient
要求从 IHttpClientFactory 创建对象时,都会返回一个新实例。但是,只要生命周期没有过期,每个人都会HttpClient
使用一个HttpMessageHandler
由 池化和重用的资源来减少资源消耗。IHttpClientFactory
HttpMessageHandler's
阅读上述链接中的详细好处。
推荐阅读
- python - df循环中现有值的新df
- xml - 基于类似的子标签将 XML 节点聚集在一起。棒状节点还应该包含不相似的子标签
- python-3.x - Django:为过时的应用程序/模型清理 SQLite d/b
- python - 尝试使用 BayesSearchCV 调整 MLPClassifier hidden_layer_sizes 时出错
- mysql - 从mysql数据库中的多个表中选择数据
- javascript - 我怎样才能让innerHtml 只写一次错误?
- sql - 查询以从 select 语句中检索自定义列
- javascript - 纯 Javascript - 将数组转换为 csv 格式
- typescript - Firestore & Cloud Function:使用我自己的文档 ID 创建新的集合文档
- java - 如何从 url 获取参数值作为字符串