Hangfire - 从工作访问服务器?

Hangfire - access server from job?

我正在使用 hangfire 将作业分发到多个服务器(它们位于不同的机器上)。

有时作业会失败,因为处理它的 machine/server 未处于就绪状态(例如,作业使用的应用程序已崩溃等)。现在我想以编程方式关闭服务器,这样它就不会接受更多的工作并且可以被修复。我该怎么做,因为所有代码都在一个不知道服务器的作业 class 中运行,而所有服务器代码所做的只是托管一个 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 = '[=10=]';
            while (userInput != 'q') {
                if (userInput == 'l') {
                    ConsoleHelpers.WriteLogFileToConsole();
                }
                userInput = Console.ReadKey().KeyChar;
            }
        }
    }
}

它只是托管服务器并根据用户输入显示一些信息。

这样我就可以解决这个问题了:在class定义Job的时候,我可以定义一个静态的属性。这可以是任何类型 - 让我在这里举一个字符串示例:

namespace MyJobProject {
   public class MyJob() {
       public static string message {get; private set;} = "Hello!";
       // other code in the job class
   }
}

然后在服务器代码中我可以访问 属性 因为它是静态的,即在原始问题的 while 循环中我可以写

while (userInput != 'q') {
    if (userInput == 'l') {
        ConsoleHelpers.WriteLogFileToConsole();
    }
    userInput = Console.ReadKey().KeyChar;
    Console.Writeline(MyJob.Message);
}

尽管如此,请记住引用命名空间 MyJobProject - 虽然这对于作业的运行来说已经是必需的了。