1
我正在使用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;
}
}
}
}
它只是託管服務器,並顯示基於用戶輸入的一些信息。
你正在討論將'server'推向全局範圍還是將其注入到每個作業中?爲什麼不使用IOC(http://docs.hangfire.io/en/latest/background-methods/using-ioc-containers.html),在該容器中註冊'BackgroundJobServer'並從那裏解析所有作業(通過ctor-injection或服務定位器模式)?請參閱http://docs.hangfire.io/en/latest/background-methods/passing-dependencies.html –
@AndreasNiedermair,我不太瞭解您的建議。這些作業是在完全不同的應用程序(一個Web API)中創建和排隊的,我的服務器是在不同機器上運行的控制檯應用程序。 Hangfire然後在後臺處理作業,但在工作班級中,我沒有提及服務器 - 事實上,他們甚至不知道服務器,甚至連Hangfire都沒有... – EluciusFTW
所以你不是在說話關於'server'作爲你的_server_,而是物理實體? –