"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);
});
我是 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);
});