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_,而是物理实体? –