Hangfire

在您的 .NET 和 .NET Core 应用程序中执行后台作业处理的简单方法。不需要 Windows 服务或单独的进程。「An easy way to perform background job processing in your .NET and .NET Core applications. No Windows Service or separate process required」

Github stars Tracking Chart

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。

使用方法

这是一个不完整的功能列表;要查看所有功能,请查看官方网站文档

Fire-and-forget tasks

专门的工作池线程会尽快执行排队的后台作业,缩短您的请求处理时间。

BackgroundJob.Enqueue(() => Console.WriteLine("Simple!"));

Delayed tasks(延迟的任务)

预定的后台作业只有在给定的时间后才会执行。

BackgroundJob.Schedule(() => Console.WriteLine("Reliable!"), TimeSpan.FromDays(7));

Recurring tasks(重复性任务)

循环作业从未如此简单;只需调用以下方法,即可使用 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)

Main metrics

Overview
Name With OwnerHangfireIO/Hangfire
Primary LanguageC#
Program languagePowerShell (Language Count: 8)
PlatformLinux, Mac, Windows
License:Other
所有者活动
Created At2013-08-06 09:43:04
Pushed At2025-04-09 09:45:22
Last Commit At
Release Count163
Last Release Namev1.8.18 (Posted on 2025-02-17 09:50:26)
First Release Namev0.5 (Posted on )
用户参与
Stargazers Count9.7k
Watchers Count308
Fork Count1.7k
Commits Count4.3k
Has Issues Enabled
Issues Count2000
Issue Open Count873
Pull Requests Count292
Pull Requests Open Count51
Pull Requests Close Count163
项目设置
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private

Hangfire

Official Site Latest version License LGPLv3 codecov Coverity Scan Build Status

Build Status