私のデータベースを更新するプロセスを実行しようとしていますが、異なる時間に異なるRecurringJobsを設定してしまうという問題があります。異なるRecurringJobsが同時に実行されています
今日私はハングファイアをインスタンス化したので、昨日からハングファイアのステータスをチェックしたとき、ジョブは昨日と今日の1つのタスクを実行する必要があることを発見しました。これは30分前に同時に実行され、 。
これを手伝ってもらえますか?
私のデータベースを更新するプロセスを実行しようとしていますが、異なる時間に異なるRecurringJobsを設定してしまうという問題があります。異なるRecurringJobsが同時に実行されています
今日私はハングファイアをインスタンス化したので、昨日からハングファイアのステータスをチェックしたとき、ジョブは昨日と今日の1つのタスクを実行する必要があることを発見しました。これは30分前に同時に実行され、 。
これを手伝ってもらえますか?
あなたの問題は、並行性のいずれかである場合、あなたはhangfireシングルスレッドを実行することによってそれを解決することができます。
var server = new BackgroundJobServer(new BackgroundJobServerOptions
{
WorkerCount = 1
});
これにより、ハングファイアはキューに入れられたジョブを順番に処理します。
また、プロバージョンのhangfireを使用している場合は、batch chainingを使用して注文を制御できます。
ワーカーがスレッドと見なされるかどうかはわかりません。 hangfireワーカー、シングルスレッドコード内
が示唆されているように、これは、同時実行の問題のように見えない正確に一つのスレッド
によって実行されます。あなたがしようとしていることは完全にはっきりしていませんが、午前7時と午後17時30分の仕事が同時に実行されているため、仕事を7時、12時45分、17時半に実行したいと思っています午前7時)。
作成した時刻に基づいて、14:30頃に作成したようです。つまり、17時30分の仕事は走っていたはずですが、翌朝7時頃まででした。私の推測では、これはIISでホストされており、サイトのアプリケーションプールはリサイクルされています。 これは、アプリケーションプール/サイト(私は午前7時であったと仮定)が再び開始されるまで実行される予定の定期的なジョブを遅延させる原因になります。
サイトが常に実行されていることを確認する方法についてはこれらの文書をチェックアウト:http://docs.hangfire.io/en/latest/deployment-to-production/making-aspnet-app-always-running.html
それはIISの問題でない場合は、何かがBackgroundJobServerが〜7までの仕事のためのデータベースの監視を停止する原因となっている必要があります:00am(サーバのシャットダウンを、エラーなど)。
私はそれを試してみます。モニターを使用すると役立つでしょうか? –
@JoseMartin - モニターとは何ですか? –
ロックとは、異なるスレッドの並行性を避けることです。私は、労働者がスレッドと見なすことができるかどうかはわかりません。 –