Hangfire 集成

介绍

Hangfire  是一名综合性的后台工作经理。您可以将ASP.NET Boilerplate与Hangfire集成,以使用它而不是  默认的后台作业管理器您可以为Hangfire使用相同的后台作业API。因此,您的代码将独立于Hangfire。如果您愿意,也可以直接使用Hangfire的API。

Hangfire Integration取决于您使用的框架。

ASP.NET Core集成

该  Abp.HangFire.AspNetCore  包用于集成到基于ASP.NET核心应用。这取决于Hangfire.AspNetCore。 本文档  介绍如何将hangfire安装到ASP.NET Core项目。对于基于ABP的项目也是如此。首先将Abp.HangFire.AspNetCore  包安装  到您的Web项目:

Install-Package Abp.HangFire.AspNetCore

然后,您可以为Hangfire安装任何存储。最常见的是SQL Server(请参阅  Hangfire.SqlServer NuGet包)。安装这些NuGet包之后,需要将项目配置为使用Hangfire。

首先,我们更改Startup类以将Hangfire添加到依赖项注入,然后在ConfigureServices方法中配置存储和连接字符串:

services.AddHangfire(config =>
{
    config.UseSqlServerStorage(_appConfiguration.GetConnectionString("Default"));
});

然后,我们在Configure方法中添加UseHangfireServer调用:

app.UseHangfireServer();

如果您想使用hangfire的仪表板,您也可以添加它:

app.UseHangfireDashboard();

如果要  授权  仪表板,可以使用AbpHangfireAuthorizationFilter,如下所示:

app.UseHangfireDashboard("/hangfire", new DashboardOptions
{
    Authorization = new[] { new AbpHangfireAuthorizationFilter("MyHangFireDashboardPermissionName") }
});

上面的配置是将hangfire集成到ASP.NET Core应用程序的标准方法。对于基于ABP的项目,我们还应该配置我们的Web模块以替换ABP的默认后台作业管理器的Hangfire:

[DependsOn(typeof (AbpHangfireAspNetCoreModule))]
public class MyProjectWebModule : AbpModule
{
    public override void PreInitialize()
    {
        Configuration.BackgroundJobs.UseHangfire();             
    }

    //...
}

我们添加了AbpHangfireAspNetCoreModule作为依赖项,并使用Configuration.BackgroundJobs.UseHangfire方法替换ABP的默认后台作业管理器的Hangfire。

Hangfire需要数据库中的架构创建权限,因为它在首次运行时会创建自己的架构和表。有关 更多信息,请参阅  Hangfire文档

ASP.NET MVC 5.x集成

该  Abp.HangFire  NuGet包用于ASP.NET MVC 5.x的项目:

Install-Package Abp.HangFire

然后,您可以为Hangfire安装任何存储。最常见的是SQL Server(请参阅  Hangfire.SqlServer NuGet包)。安装这些NuGet软件包后,您可以将项目配置为使用Hangfire,如下所示:

[DependsOn(typeof (AbpHangfireModule))]
public class MyProjectWebModule : AbpModule
{
    public override void PreInitialize()
    {
        Configuration.BackgroundJobs.UseHangfire(configuration =>
        {
            configuration.GlobalConfiguration.UseSqlServerStorage("Default");
        });
                
    }

    //...
}

我们添加了AbpHangfireModule作为依赖项,并使用Configuration.BackgroundJobs.UseHangfire方法来启用和配置Hangfire(“Default”是web.config中的连接字符串)。

Hangfire需要数据库中的架构创建权限,因为它在首次运行时会创建自己的架构和表。有关 更多信息,请参阅  Hangfire文档

仪表板授权

Hangfire可以显示仪表板页面,以便您可以实时查看所有后台作业的状态。您可以按照其文档中的说明进行配置  默认情况下,此仪表板页面可供所有用户使用,并且未经授权。您可以 使用Abp.HangFire包中定义的AbpHangfireAuthorizationFilterclass 将其集成到ABP的  授权系统中。配置示例:

app.UseHangfireDashboard("/hangfire", new DashboardOptions
{
    Authorization = new[] { new AbpHangfireAuthorizationFilter() }
});

这将检查当前用户是否已登录到应用程序。如果您想要额外的权限,可以传入其构造函数:

app.UseHangfireDashboard("/hangfire", new DashboardOptions
{
    Authorization = new[] { new AbpHangfireAuthorizationFilter("MyHangFireDashboardPermissionName") }
});

注意:应该在Startup类中的身份验证中间件之后调用UseHangfireDashboard(可能作为最后一行)。否则,授权将始终失败。

限制

Hangfire不支持单个事务中的多个后台作业。因为,Hangfire不参与当前的交易。它不使用环境事务(TransactionScope)。

它适用于默认的后台作业管理器,因为它只是执行db命令,它按预期属于当前事务。

nidie.com.cn - 用心与你沟通