情况:我有许多天蓝色函数,可以从各种网站获取数据。网站的域发生了变化,每个功能都进行了多个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从队列1中担心Job1。有更好的方法来解决这个问题吗?
我在应用程序的某些部分使用了HttpClient,在其他部分(新的和旧的)都使用了RestClient。这就是为什么我在这个问题中都提到这两个原因。
这仍然在Azure Functions 1.x .net标准中
答案 0 :(得分:2)
Azure函数使用一个执行模型,其中在同一进程中可以同时执行多个函数的多个执行。如果您在该过程中定义了多个函数引用的静态变量,那么绝对可以在这些函数的执行中重用该静态变量。
对于HttpClient之类的类型,通常需要这种行为。通常,您将希望在一个函数的多个执行之间重用同一HttpClient实例,因为这样可以重用基础连接,并且HttpClient是线程安全的。我对RestClient并不熟悉,您需要自行研究其线程安全性。
如果您需要在要与之通信的每个域中为客户端对象配置特定的设置,那么您可能需要创建一个静态的客户端字典,每个域中包含一个客户端。