避免 - 由于系统缺少足够的缓冲区 space 或队列已满,无法执行对套接字的操作
Avoid - An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full
我在使用 cosmos DB 时从 Azure Function App 收到以下错误。我对 HttpClient 也有同样的看法,但似乎通过静态 HttpClient 解决了这个问题。是否可以仅通过将 CosmosDB 客户端设为静态来解决同样的问题?类似于:
public class DocRepoCoach
{
public string ConnStr { get; set; }
public Container XX1Container { get; set; }
public Container XX2Container { get; set; }
**public static CosmosClient Client { get; set; }**
public DocRepoCoach(string connectionString)
{
ConnStr = connectionString;
var options = new CosmosClientOptions() { AllowBulkExecution = true, MaxRetryAttemptsOnRateLimitedRequests = 1000 };
Client = new CosmosClient(ConnStr, options);
XX1Container = Client.GetContainer("XXXAPI", "XX");
XX2Container = Client.GetContainer("XXXAPI", "XX");
}
}
是的,请将其设为静态。
Azure 函数的推荐做法是在应用程序的生命周期内使用单例客户端。当您使用静态客户端时,CosmosClient 可以管理连接。
以下是建议
- 不要在每次调用函数时都创建新的客户端。
- 一定要创建每个函数调用都可以使用的单一静态客户端。
- 如果不同的功能使用相同的服务,请考虑在共享助手中创建一个静态客户端class。
Azure 文档
中也记录了这些内容here
我在使用 cosmos DB 时从 Azure Function App 收到以下错误。我对 HttpClient 也有同样的看法,但似乎通过静态 HttpClient 解决了这个问题。是否可以仅通过将 CosmosDB 客户端设为静态来解决同样的问题?类似于:
public class DocRepoCoach
{
public string ConnStr { get; set; }
public Container XX1Container { get; set; }
public Container XX2Container { get; set; }
**public static CosmosClient Client { get; set; }**
public DocRepoCoach(string connectionString)
{
ConnStr = connectionString;
var options = new CosmosClientOptions() { AllowBulkExecution = true, MaxRetryAttemptsOnRateLimitedRequests = 1000 };
Client = new CosmosClient(ConnStr, options);
XX1Container = Client.GetContainer("XXXAPI", "XX");
XX2Container = Client.GetContainer("XXXAPI", "XX");
}
}
是的,请将其设为静态。 Azure 函数的推荐做法是在应用程序的生命周期内使用单例客户端。当您使用静态客户端时,CosmosClient 可以管理连接。
以下是建议
- 不要在每次调用函数时都创建新的客户端。
- 一定要创建每个函数调用都可以使用的单一静态客户端。
- 如果不同的功能使用相同的服务,请考虑在共享助手中创建一个静态客户端class。
Azure 文档
中也记录了这些内容here