检查 HangFire.JobStorage 是否被实例化
Check if HangFire.JobStorage is instantiated
我有一个作为 Hangfire 客户端工作的 ASP.NET MVC 应用程序 - 它使不同的作业排队。我正在使用 SqlServerJobStorage
来使用 Hangfire。
现在我正在处理一个没有连接到 Hangfire 数据库的场景,并且在未来的某个地方正在实例化连接。
目标是我的 ASP.NET MVC 应用程序应该在此之前继续工作。连接恢复后,它应该开始排队作业。
因此应用程序将在 Global.asax
:
中抛出异常
Hangfire.GlobalConfiguration.Configuration.UseSqlServerStorage("EshopServiceHangfire");
此外,所有作业入队也会抛出异常:
BackgroundJob.Enqueue<ISomeClass>(x => x.DoSomethingGreat(JobCancellationToken.Null));
我将 Global.asax
中的行放在 try/catch 块中,因此它不会抛出。
当有人排队工作时,我想检查 JobStorage.Current
如果它没有初始化,我会尝试用相同的代码再次初始化它:
Hangfire.GlobalConfiguration.Configuration.UseSqlServerStorage("EshopServiceHangfire");
有人知道这样做的方法吗?文档没有关于此的信息。
类似于 Hangfire.GlobalConfiguration.JobStorage.IsInitialized
?
从 Job enqueue 中捕获异常也是一种方法,但我不喜欢它,因为它会抛出非特定的
InvalidOperationException: JobStorage.Current property value has not been initialized. You must set it before using Hangfire Client or Server API.
非常感谢那些读到这里的人)
您可以使用 Hangfire.JobStorage.Current
静态 属性 本身来检查 Hangfire 存储配置:
//InvalidOperationException " JobStorage.Current property value has not been initialized"
var storage = JobStorage.Current;
GlobalConfiguration.Configuration.UsePostgreSqlStorage(vaildConnString);
//no exception
storage = JobStorage.Current;
此外,您可以查询数据库来测试连接:
JobStorage.Current.GetConnection().GetRecurringJobs();
考虑到异常,我认为抛出 InvalidOperationException
而不是 SqlException
之类的东西是正确的。 Hangfire 核心与特定数据库的细节隔离。
您好,您可以使用这条路:
1-安装Hangfire->Hangfire.AspNetCore(v1.7.14)和Hangfire.Core(v1.7.14)
2-注册服务
class Program
{
static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args)
{
return WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
}
}
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
// Add Hangfire services.
services.AddHangfire(configuration => configuration
.SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
.UseSimpleAssemblyNameTypeSerializer()
.UseRecommendedSerializerSettings()
.UseSqlServerStorage("Server=-; Database=-; user=-; password=-;"));
// Add the processing server as IHostedService
services.AddHangfireServer();
}
3- 添加仪表板 UI
public void Configure(IApplicationBuilder app, IBackgroundJobClient
backgroundJobs, IHostingEnvironment env)
{
app.UseHangfireDashboard();
backgroundJobs.Enqueue(() => Console.WriteLine("Hello world from
Hangfire!"));
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
}
4-运行 申请
还应该出现以下消息,因为我们创建了后台作业,其唯一行为是向控制台写入消息。
来自 Hangfire 的世界,您好!
我有一个作为 Hangfire 客户端工作的 ASP.NET MVC 应用程序 - 它使不同的作业排队。我正在使用 SqlServerJobStorage
来使用 Hangfire。
现在我正在处理一个没有连接到 Hangfire 数据库的场景,并且在未来的某个地方正在实例化连接。
目标是我的 ASP.NET MVC 应用程序应该在此之前继续工作。连接恢复后,它应该开始排队作业。
因此应用程序将在 Global.asax
:
Hangfire.GlobalConfiguration.Configuration.UseSqlServerStorage("EshopServiceHangfire");
此外,所有作业入队也会抛出异常:
BackgroundJob.Enqueue<ISomeClass>(x => x.DoSomethingGreat(JobCancellationToken.Null));
我将 Global.asax
中的行放在 try/catch 块中,因此它不会抛出。
当有人排队工作时,我想检查 JobStorage.Current
如果它没有初始化,我会尝试用相同的代码再次初始化它:
Hangfire.GlobalConfiguration.Configuration.UseSqlServerStorage("EshopServiceHangfire");
有人知道这样做的方法吗?文档没有关于此的信息。
类似于 Hangfire.GlobalConfiguration.JobStorage.IsInitialized
?
从 Job enqueue 中捕获异常也是一种方法,但我不喜欢它,因为它会抛出非特定的
InvalidOperationException: JobStorage.Current property value has not been initialized. You must set it before using Hangfire Client or Server API.
非常感谢那些读到这里的人)
您可以使用 Hangfire.JobStorage.Current
静态 属性 本身来检查 Hangfire 存储配置:
//InvalidOperationException " JobStorage.Current property value has not been initialized"
var storage = JobStorage.Current;
GlobalConfiguration.Configuration.UsePostgreSqlStorage(vaildConnString);
//no exception
storage = JobStorage.Current;
此外,您可以查询数据库来测试连接:
JobStorage.Current.GetConnection().GetRecurringJobs();
考虑到异常,我认为抛出 InvalidOperationException
而不是 SqlException
之类的东西是正确的。 Hangfire 核心与特定数据库的细节隔离。
您好,您可以使用这条路:
1-安装Hangfire->Hangfire.AspNetCore(v1.7.14)和Hangfire.Core(v1.7.14)
2-注册服务
class Program
{
static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args)
{
return WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
}
}
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
// Add Hangfire services.
services.AddHangfire(configuration => configuration
.SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
.UseSimpleAssemblyNameTypeSerializer()
.UseRecommendedSerializerSettings()
.UseSqlServerStorage("Server=-; Database=-; user=-; password=-;"));
// Add the processing server as IHostedService
services.AddHangfireServer();
}
3- 添加仪表板 UI
public void Configure(IApplicationBuilder app, IBackgroundJobClient
backgroundJobs, IHostingEnvironment env)
{
app.UseHangfireDashboard();
backgroundJobs.Enqueue(() => Console.WriteLine("Hello world from
Hangfire!"));
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
}
4-运行 申请 还应该出现以下消息,因为我们创建了后台作业,其唯一行为是向控制台写入消息。 来自 Hangfire 的世界,您好!