私はhangfireを使用して複数のサーバー(別々のマシンにある)にジョブを配布しています。Hangfire - ジョブからサーバにアクセスしますか?
ジョブを処理するマシン/サーバーが準備完了状態でない(ジョブが使用しているアプリケーションがクラッシュしたなど)場合があるため、ジョブが失敗することがあります。今では、サーバーをプログラムでシャットダウンして、より多くのジョブを受け入れずに修復できるようにしたいと考えています。すべてのコードがサーバーを知らないジョブクラスで実行され、すべてのサーバーコードがホストのhangfireserverインスタンスであるため、どのようにすればいいですか?次のように
具体的には、私のサーバーアプリケーションが見えます:
class Program {
static void Main(string[] args) {
GlobalConfiguration.Configuration.UseSqlServerStorage("HangFireDBConnection");
var serverOptions = new BackgroundJobServerOptions {
WorkerCount = 1
};
using (var server = new BackgroundJobServer(serverOptions)) {
ConsoleHelpers.ConfigureConsole();
ConsoleHelpers.WriteWelcomeMessage();
char userInput = '\0';
while (userInput != 'q') {
if (userInput == 'l') {
ConsoleHelpers.WriteLogFileToConsole();
}
userInput = Console.ReadKey().KeyChar;
}
}
}
}
それはちょうどサーバーをホストし、ユーザー入力に基づいていくつかの情報が表示されます。
「サーバー」をグローバルスコープにプッシュすること、またはすべてのジョブ内にそれを挿入することについて話していますか? IOC(http://docs.hangfire.io/en/latest/background-methods/using-ioc-containers.html)を使用して、そのコンテナで 'BackgroundJobServer'を登録し、そこからすべてのジョブを解決してください(via ctor-injectionまたはサービスロケータパターン)? @docs.hangfire.io/en/latest/background-methods/passing-dependencies.html –
@AndreasNiedermair、私はあなたの提案を本当に理解していません。ジョブは全く異なるアプリケーション(Web API)で作成され、キューに入れられ、サーバーは異なるマシン上で実行されるコンソールアプリケーションです。 Hangfireはバックグラウンドでジョブを処理しますが、ジョブクラスではサーバへの参照はありません。実際には、サーバのことはまったく知らなくても、Hangfireのものではありません。 – EluciusFTW
あなたは話していませんあなたの_server_として 'server'については、物理的なエンティティですか? –