mirror of https://github.com/abpframework/abp
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
116 lines
3.3 KiB
116 lines
3.3 KiB
# Hangfire后台作业管理
|
|
|
|
[Hangfire](https://www.hangfire.io/)是一个高级的后台作业管理. 你可以用ABP框架集成Hangfire代替[默认后台作业管理](Background-Jobs.md). 通过这种方式你可以使用相同的后台作业API,将你的代码独立于Hangfire. 如果你喜欢也可以直接使用Hangfire的API.
|
|
|
|
> 参阅[后台作业文档](Background-Jobs.md),学习如何使用后台作业系统. 本文只介绍了如何安装和配置Hangfire集成.
|
|
|
|
## 安装
|
|
|
|
建议使用[ABP CLI](CLI.md)安装包.
|
|
|
|
### 使用ABP CLI
|
|
|
|
在项目的文件夹(.csproj文件)中打开命令行窗口输入以下命令:
|
|
|
|
````bash
|
|
abp add-package Volo.Abp.BackgroundJobs.HangFire
|
|
````
|
|
|
|
### 手动安装
|
|
|
|
如果你想手动安装;
|
|
|
|
1. 添加 [Volo.Abp.BackgroundJobs.HangFire](https://www.nuget.org/packages/Volo.Abp.BackgroundJobs.HangFire) NuGet包添加到你的项目:
|
|
|
|
````
|
|
Install-Package Volo.Abp.BackgroundJobs.HangFire
|
|
````
|
|
|
|
2. 添加 `AbpBackgroundJobsHangfireModule` 到你的模块的依赖列表:
|
|
|
|
````csharp
|
|
[DependsOn(
|
|
//...other dependencies
|
|
typeof(AbpBackgroundJobsHangfireModule) //Add the new module dependency
|
|
)]
|
|
public class YourModule : AbpModule
|
|
{
|
|
}
|
|
````
|
|
|
|
## 配置
|
|
|
|
你可以安装任何Hangfire存储. 最常用的是SQL Server(参阅[Hangfire.SqlServer](https://www.nuget.org/packages/Hangfire.SqlServer)NuGet包).
|
|
|
|
当你安装NuGet包后,你需要为你的项目配置Hangfire.
|
|
|
|
1.首先, 我们需要更改 `Module` 类 (例如: `<YourProjectName>HttpApiHostModule`) 的 `ConfigureServices` 方法去配置Hangfire存储和连接字符串:
|
|
|
|
````csharp
|
|
public override void ConfigureServices(ServiceConfigurationContext context)
|
|
{
|
|
var configuration = context.Services.GetConfiguration();
|
|
var hostingEnvironment = context.Services.GetHostingEnvironment();
|
|
|
|
//... other configarations.
|
|
|
|
ConfigureHangfire(context, configuration);
|
|
}
|
|
|
|
private void ConfigureHangfire(ServiceConfigurationContext context, IConfiguration configuration)
|
|
{
|
|
context.Services.AddHangfire(config =>
|
|
{
|
|
config.UseSqlServerStorage(configuration.GetConnectionString("Default"));
|
|
});
|
|
}
|
|
````
|
|
|
|
### 指定队列
|
|
|
|
你可以使用 [`QueueAttribute`](https://docs.hangfire.io/en/latest/background-processing/configuring-queues.html) 来指定队列.
|
|
|
|
````csharp
|
|
using System.Threading.Tasks;
|
|
using Volo.Abp.BackgroundJobs;
|
|
using Volo.Abp.DependencyInjection;
|
|
using Volo.Abp.Emailing;
|
|
|
|
namespace MyProject
|
|
{
|
|
[Queue("alpha")]
|
|
public class EmailSendingJob
|
|
: AsyncBackgroundJob<EmailSendingArgs>, ITransientDependency
|
|
{
|
|
private readonly IEmailSender _emailSender;
|
|
|
|
public EmailSendingJob(IEmailSender emailSender)
|
|
{
|
|
_emailSender = emailSender;
|
|
}
|
|
|
|
public override async Task ExecuteAsync(EmailSendingArgs args)
|
|
{
|
|
await _emailSender.SendAsync(
|
|
args.EmailAddress,
|
|
args.Subject,
|
|
args.Body
|
|
);
|
|
}
|
|
}
|
|
}
|
|
````
|
|
|
|
1. 如果你想要使用Hangfire的面板,你可以在 `Module` 类的 `OnApplicationInitialization` 方法添加: `UseHangfireDashboard`
|
|
|
|
````csharp
|
|
public override void OnApplicationInitialization(ApplicationInitializationContext context)
|
|
{
|
|
var app = context.GetApplicationBuilder();
|
|
|
|
// ... others
|
|
|
|
app.UseHangfireDashboard();
|
|
|
|
}
|
|
```` |