避免 - 由于系统缺少足够的缓冲区 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