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
- 虽然这对于作业的运行来说已经是必需的了。
我正在使用 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
- 虽然这对于作业的运行来说已经是必需的了。