6

私はハングファイアを初めて使用するので、おそらくどこかを台無しにしています。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");

そこで、DB に 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

何か不足していますか?

4

2 に答える 2

3

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();
        });
于 2015-03-03T06:30:51.480 に答える
2

代わりに、HangFire ワーカーの量を減らそうとしましたか? Hangfire はデフォルトで 20 個のワーカーを使用するため、これらは接続プールを消費している可能性があります * それぞれ X 接続 (いくつあるかは覚えていませんが、いくつかあります) であり、接続プールを消費している可能性があります...したがって、接続タイムアウト...

hangfire の初期化で使用するワーカーの数を設定できます。この例では、ワーカーを 1 つだけ使用します...

app.UseHangfire(config =>
{
    config.UseServer(1);
});
于 2015-09-14T16:01:38.320 に答える