从池中获取连接时超时。Hangfire.Postgres

6
我是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数据库。

然后,我构建并运行我的项目。一切正常。在我的PostgreSQL中创建了Hangfire DB的所有表格。它很好地工作。

但是,当我尝试:

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

我收到了一个带有内部信息 InnerMessage 的异常:
  "Timeout while getting a connection from pool." postgres

我有遗漏什么吗?


看起来是一个已知的问题 - LeftyX
2个回答

3
尝试通过连接字符串或字符串生成器关闭连接池。
以下是我们的做法。
        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();
        });

2

您尝试减少HangFire工作线程的数量吗?也许这些工作线程正在消耗您的连接池,因为Hangfire默认情况下使用20个工作线程*X个连接(不记得有多少个,但它们是几个),这可能会消耗您的连接池...从而导致连接超时...

您可以在hangfire初始化中设置要使用的工作线程数量。在这个例子中,您只需要使用1个工作线程...

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接