Hangfire
概述
在 ASP.NET 应用程序中,以极其简单的方式执行 fire-and-forget、delayed 和 recurring 作业。支持 CPU 和 I/O 密集型、长运行和短运行的作业。不需要 Windows 服务/任务调度程序。支持 Redis、SQL Server、SQL Azure 和 MSMQ。
Hangfire 提供了一个统一的编程模型,以可靠的方式处理后台任务,并在共享主机、专用主机或云端运行它们。你可以从简单的设置开始,随着时间的推移,这些场景下的后台任务的计算能力会不断增长。
- 群发通知/新闻通讯
- 从 xml、csv 或 json 批量导入。
- 建立档案
- 处理 web 钩子(firing off web hooks)
- 删除用户
- 构建不同的图形
- 图像/视频处理
- 清理临时文件
- 重复的自动报告
- 数据库维护
- ...等等
Hangfire 是 Resque、Sidekiq、delayed_job、Celery 的 .NET 框架替代品。
安装
Hangfire 是作为 NuGet 包提供的。你可以使用 NuGet 软件包控制台窗口安装它。
PM> Install-Package Hangfire
安装完成后,请用以下代码更新您现有的 OWIN 启动文件。如果您的项目中没有这个类或不知道它是什么,请阅读快速入门指南来了解如何安装 Hangfire。
使用方法
这是一个不完整的功能列表;要查看所有功能,请查看官方网站和文档。
专门的工作池线程会尽快执行排队的后台作业,缩短您的请求处理时间。
BackgroundJob.Enqueue(() => Console.WriteLine("Simple!"));
预定的后台作业只有在给定的时间后才会执行。
BackgroundJob.Schedule(() => Console.WriteLine("Reliable!"), TimeSpan.FromDays(7));
循环作业从未如此简单;只需调用以下方法,即可使用 CRON 表达式 执行任何类型的循环任务。
RecurringJob.AddOrUpdate(() => Console.WriteLine("Transparent!"), Cron.Daily);
Continuations
Continuation 允许你通过将多个后台作业链在一起来定义复杂的工作流。
var id = BackgroundJob.Enqueue(() => Console.WriteLine("Hello, ")); BackgroundJob.ContinueWith(id, () => Console.WriteLine("world!"));
在Web应用程序中处理后台任务...
你可以在任何兼容 OWIN 的应用框架中处理后台任务,包括 ASP.NET MVC, ASP.NET Web API, FubuMvc, Nancy等。忘掉 AppDomain unloads, Web Garden 和 Web Farm issues -- Hangfire 对于从头开始的 Web 应用是可靠的,即使是在共享主机上。
app.UseHangfireServer();
... 或其他地方
在控制台应用程序、Windows 服务、Azure Worker 角色等。
using (new BackgroundJobServer()) { Console.WriteLine("Hangfire Server started. Press ENTER to exit..."); Console.ReadLine(); }
有问题?有问题?
当公开讨论时,开源项目的发展会更顺利。
如果你有任何问题,与 Hangfire 使用相关的问题,或者你想讨论新的功能,请访问讨论区。你可以用你现有的 Google 或 GitHub 账户在那里登录,所以开始使用它非常简单。
如果你发现了一个bug,请将它报告到 Hangfire GitHub Issues。欢迎提供详细的报告,包括堆栈痕迹、实际和预期行为。
相关项目
请看官网的扩展页面。
从源代码构建
先决条件
- Razor Generator: 如果你想编辑 cshtml 文件,则需要。
- 安装 MSMQ 服务(Microsoft Message Queue Server),如果还没有安装的话。
然后,创建一个环境变量,变量名为 Hangfire_SqlServer_ConnectionStringTemplate,并将你的连接字符串放在变量值字段中。例子:
- 变量名:
Hangfire_SqlServer_ConnectionStringTemplate
- 变量值:
Data Source=.\sqlexpress;Initial Catalog=Hangfire.SqlServer.Tests;Integrated Security=True;
要构建一个解决方案并获得汇编文件,只需运行以下命令。所有的构建工件,包括 *.pdb 文件,将被放置到构建文件夹中。在提出拉取请求之前,请使用这个命令来确保一切正常。另外,你可以从包管理器控制台窗口执行这个命令。
build
要构建 NuGet 包以及归档文件,请使用如下所示的 pack 命令。你可以在构建文件夹中找到结果文件。
build pack
要查看完整的可用命令列表,请使用 -docs 开关。
build -docs
Hangfire 使用 psake 构建自动化工具。所有的 psake 任务和函数都定义在 psake-build.ps1(适用于本项目)和 psake-common.ps1(适用于其他 Hangfire 项目)文件中。由于 psake 项目的存在,它们的使用和修改都非常简单。
Razor 模板在保存时使用 Razor Generator Visual Studio extension 进行编译。如果你想修改 Dashboard UI,你需要安装这个。
报告安全问题
为了让社区有时间进行响应和升级,我们强烈要求您私下报告所有安全问题。请将详细情况通过电子邮件发送至 security@hangfire.io,我们将尽快回复。安全问题总是优先于错误修复和功能工作。如果发布的版本包含严重的安全修复,我们可以也确实将其标记为 "紧急"。
许可证
Copyright © 2013-2020 Sergey Odinokov.
本程序是自由软件:您可以根据自由软件基金会发布的GNU较小通用公共许可证的条款重新发布它和/或修改它,或者是该许可证的第3版,或者(根据您的选择)任何更新的版本。
本程序发布的目的是希望它是有用的,但没有任何保证,甚至没有默示的适销性或适合特定用途的保证。更多细节请参见 GNU Lesser General Public License。
您应该已经随本程序收到了一份 GNU Lesser General Public License 的副本。如果没有,请参见 http://www.gnu.org/licenses/。
法律声明
通过提交拉取请求,您放弃了对提交给 Hangfire 项目的任何修改的任何权利或要求,并将这些修改的版权转让给 Sergey Odinokov。
如果您不能或不想重新分配这些权利(您的雇主的雇佣合同可能不允许这样做),您不应该提交 PR。打开一个问题,别人可以做的工作。
这是一种法律上的说法:"如果你向我们提交PR,那代码就变成我们的了"。99.9% 的情况下,这就是你的目的;我们希望这不会吓到你,让你不敢贡献。
(The first version translated by vz on 2020.09.20)