【问题标题】:Is this use of a Static Object For HttpClient/RestClient safe across Azure functions在 Azure 函数中使用 HttpClient/RestClient 的静态对象是否安全
【发布时间】:2019-03-06 01:31:23
【问题描述】:

情况:我有一堆天蓝色的功能,可以从各种网站获取数据。网站的域发生变化,每个函数都会进行多次 http 调用。当网站 A 的功能不从网站 B 提取数据时,这一点非常重要。 我在读到最好重用您的 httpclient/restclient 等。
链接:HttpClient best practices in Azure Functions

但我想要关于如何正确执行此操作的建议。

public class WebsiteCaller
{
private static RestClient httpClient = new RestSharp.RestClient();

public WebsiteCaller(string domainName)
{
    httpClient = new RestClient(domainName);

}
public object GetWebData1(string parameters)
{
    //use httpClient with parameters and return data

}
public object GetWebData2(string parameters)
{
    //use httpClient with parameters and return data
}

}

public class Manager
{
public void GetDataAndDoStuff()
{
    var webConnection = new WebsiteCaller("clientnameDomain.com");
    var result1 = webConnection.GetWebData1("name=something");
    //Do something with result1
    var result2 = webConnection.GetWebData2("name=result1Info");
    //Continue making more http calls
}

}

如果此函数是从队列触发器中触发的,那么一分钟可能会发生数百次。我是否必须使用 Job2 中的 RestClient 担心队列中的 Job1。有没有更好的方法来处理这个问题?
我将直接 HttpClient 用于我的应用程序的某些部分,将 RestClient 用于其他部分(新的和旧的)。这就是为什么我在这个问题中提到两者。 这仍在 Azure Functions 1.x .net 标准中

【问题讨论】:

    标签: azure azure-functions restsharp dotnet-httpclient


    【解决方案1】:

    Azure Functions 使用一种执行模型,在该模型中,同一进程中可以有多个函数的多个并发执行。如果您在该进程中定义了多个函数引用的静态变量,那么绝对可以在这些函数的执行过程中重用该静态变量。

    对于像 HttpClient 这样的类型,这种行为通常是可取的。您通常希望在函数的多次执行中重用相同的 HttpClient 实例,因为这允许重用底层连接,并且 HttpClient 是线程安全的。我不熟悉RestClient,你需要自己研究它是否线程安全。

    如果您需要为每个与您交谈的域配置特定设置的客户端对象,那么您可能希望创建一个客户端静态字典,每个域保存一个客户端。

    【讨论】:

    • 基本上每次函数运行时都使用不同的域名。在上面的构造函数中设置客户端的 url 会起作用吗?还是我应该使用静态对象,但在使用之前在函数方法中设置 url?
    • 啊。如果域名每次都不同,并且不太可能重复,那么据我所知,使用静态 HttpClient 实例没有多大意义。您可能希望在使用客户端后将其处理掉,因为您想断开与服务器的连接(因为您不会再次与它交谈)。您可以同时进行多少出站连接是有限制的,因此处置应该可以帮助您保持在限制之下。我会注意到您的情况听起来很不寻常,这就是标准指南可能不适用的原因。
    猜你喜欢
    • 1970-01-01
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    相关资源
    最近更新 更多