"Timeout while getting a connection from pool." Hangfire.Postgres

"Timeout while getting a connection from pool." Hangfire.Postgres

我是 Hangfire 的新手,所以我可能在某个地方搞砸了。我将 Hangfire 配置为:https://github.com/HangfireIO/Hangfire#installation

但不是:

 config.UseSqlServerStorage("<connection string or its name>");

我有:

 config.UsePostgreSqlStorage("Server=127.0.0.1;Port=5432;User Id=postgres;Password=pwd;Database=Hangfire");

所以我在我的数据库中创建了一个 Hangfire 数据库。

然后,我正在构建 运行 我的项目。没关系。在我的 postgres 上创建 Hangfire DB 中的所有表。效果很好。

但是,当我尝试时:

   BackgroundJob.Enqueue(() => HubService.SendPushNotificationToUsers(threadParticipants,  messageApi.SenderId, messageApi.SenderName, messageApi.ThreadId, messageApi.Content));

我收到 InnerMessage 异常:

  "Timeout while getting a connection from pool." postgres

我是不是漏掉了什么?

尝试通过 ConnectionString 或 String Builder 关闭连接池。

这是我们的做法

        var sb = new NpgsqlConnectionStringBuilder(connectionString);
        sb.Pooling = false;
        app.UseHangfire(config =>
        {
            config.UseActivator(new WindsorJobActivator(container.Kernel));
            config.UsePostgreSqlStorage(sb.ToString(), new PostgreSqlStorageOptions() { UseNativeDatabaseTransactions = true });
            config.UseServer();
        });

您是否尝试过减少 HangFire 工作人员的数量? 也许这些正在消耗你的连接池,因为 Hangfire 默认使用 20 个工作人员 * 每个 X 连接(不记得有多少,但它们是几个)并且可能正在消耗你的连接池......因此连接超时......

您可以设置在 hangfire 初始化中要使用多少个 worker。 在此示例中,您将仅使用 1 个工人...

app.UseHangfire(config =>
{
    config.UseServer(1);
});