网易首页 > 网易号 > 正文 申请入驻

什么是Hangfire?一篇文章带你了解

0
分享至

Hangfire 适用于大多数 .NET 平台:.NET Framework 4.5 或更高版本、.NET Core 1.0 或更高版本,或任何与 .NET Standard 1.3 兼容的平台。

要求

Hangfire 适用于大多数 .NET 平台:.NET Framework 4.5 或更高版本、.NET Core 1.0 或更高版本,或任何与 .NET Standard 1.3 兼容的平台。您可以将它与几乎任何应用程序框架集成,包括 ASP.NET、ASP.NET Core、控制台应用程序、Windows 服务、WCF,以及社区驱动的框架,如 Nancy 或 ServiceStack。

存储

存储是 Hangfire 保存与后台作业处理相关的所有信息的地方。类型、方法名称、参数等所有细节都被序列化并放入存储中,没有数据保存在进程的内存中。存储子系统在 Hangfire 中被很好地抽象出来,可以为 RDBMS 和 NoSQL 解决方案实现。

这是您必须做出的主要决定,也是开始使用框架之前所需的唯一配置。以下示例显示如何使用 SQL Server 数据库配置 Hangfire。请注意,连接字符串可能会有所不同,具体取决于您的环境。

GlobalConfiguration.Configuration .UseSqlServerStorage(@"Server=.\SQLEXPRESS; Database=Hangfire.Sample; Integrated Security=True");

客户端

Client 负责创建后台作业并将它们保存到 Storage 中。后台作业是一个应该在当前执行上下文之外执行的工作单元,例如在后台线程、其他进程中,甚至在不同的服务器上——这一切都可以通过 Hangfire 实现,即使没有额外的配置。

BackgroundJob.Enqueue(() => Console.WriteLine("Hello, world!"));

请注意,这不是委托,而是表达式树。Hangfire 不是立即调用该方法,而是序列化类型 ( System.Console)、方法名称 ( WriteLine,带有所有参数类型以便稍后识别它) 和所有给定的参数,并将其放入 Storage。

服务器

Hangfire Server 通过查询存储来处理后台作业。粗略地说,它是一组后台线程,它们侦听 Storage 以获取新的后台作业,并通过反序列化类型、方法和参数来执行它们。

您可以将此后台作业服务器放置在您想要的任何进程中,包括像 ASP.NET 这样的危险进程——即使您终止了一个进程,您的后台作业也会在重新启动后自动重试。因此,在 Web 应用程序的基本配置中,您不再需要使用 Windows 服务进行后台处理。

using (new BackgroundJobServer()) { Console.ReadLine(); }

安装

Hangfire 作为几个 NuGet 包分发,从主要的 Hangfire.Core 开始,它包含所有主要类和抽象。其他包如 Hangfire.SqlServer 提供功能或抽象实现。要开始使用 Hangfire,请安装主软件包并选择可用的存储空间之一。

Visual Studio 2017 发布后,出现了一种全新的 NuGet 包安装方式。所以我放弃了列出安装 NuGet 包的所有方法,并回退到使用该dotnet应用程序几乎在任何地方都可用的方法。

dotnet add package Hangfire.Core dotnet add package Hangfire.SqlServer

配置

使用GlobalConfiguration类执行配置。它的Configuration属性提供了很多扩展方法,既有来自 Hangfire.Core 的,也有来自其他包的。如果你安装了一个新的包,不要犹豫,检查是否有新的扩展方法。

GlobalConfiguration.Configuration .SetDataCompatibilityLevel(CompatibilityLevel.Version_170) .UseSimpleAssemblyNameTypeSerializer() .UseRecommendedSerializerSettings() .UseSqlServerStorage("Database=Hangfire.Sample; Integrated Security=True;", new SqlServerStorageOptions { CommandBatchMaxTimeout = TimeSpan.FromMinutes(5), SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5), QueuePollInterval = TimeSpan.Zero, UseRecommendedIsolationLevel = true, UsePageLocksOnDequeue = true, DisableGlobalLocks = true }) .UseBatches() .UsePerformanceCounters();

方法调用可以链接起来,因此不需要一次又一次地使用类名。全局配置是为了简单起见,几乎每个 Hangfire 类都允许您指定存储、过滤器等的覆盖。在 ASP.NET Core 环境中,全局配置类隐藏在AddHangfire方法中。

用法

以下是所有运行中的 Hangfire 组件,作为打印“Hello, world!”的完整工作示例。来自后台线程的消息。您可以注释与服务器相关的行,并多次运行该程序——只要您再次取消注释这些行,就会处理所有后台作业。

using System; using Hangfire; using Hangfire.SqlServer; namespace ConsoleApplication2 { class Program { static void Main() { GlobalConfiguration.Configuration .SetDataCompatibilityLevel(CompatibilityLevel.Version_170) .UseColouredConsoleLogProvider() .UseSimpleAssemblyNameTypeSerializer() .UseRecommendedSerializerSettings() .UseSqlServerStorage("Database=Hangfire.Sample; Integrated Security=True;", new SqlServerStorageOptions { CommandBatchMaxTimeout = TimeSpan.FromMinutes(5), SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5), QueuePollInterval = TimeSpan.Zero, UseRecommendedIsolationLevel = true, UsePageLocksOnDequeue = true, DisableGlobalLocks = true }); BackgroundJob.Enqueue(() => Console.WriteLine("Hello, world!")); using (var server = new BackgroundJobServer()) { Console.ReadLine(); } } } }

原文来自:https://mp.weixin.qq.com/s/HXKl6Acu43egjDji_WkCBw
本文地址:https://www.linuxprobe.com/hangfire.html编辑:姜 一 一,审核员:逄增宝
Linux命令大全:https://www.linuxcool.com/

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
肖纯锦临刑在即,其妻哭求陈毅,一通电话救下昔日恩人

肖纯锦临刑在即,其妻哭求陈毅,一通电话救下昔日恩人

唠叨说历史
2026-03-28 15:04:59
张玉宁:在国足就是全力以赴;作为队长要凝聚好球队

张玉宁:在国足就是全力以赴;作为队长要凝聚好球队

懂球帝
2026-06-02 18:00:13
女篮世界杯中国队遭开门黑!首秀惜败德国:G2战又掀翻欧洲劲旅!

女篮世界杯中国队遭开门黑!首秀惜败德国:G2战又掀翻欧洲劲旅!

篮球快餐车
2026-06-02 02:17:47
李连杰一家三口拜见仁波切,64岁利智许久不见,颜值回春如昔日!

李连杰一家三口拜见仁波切,64岁利智许久不见,颜值回春如昔日!

娱乐团长
2026-06-02 15:09:12
七千多次突击几无所得,半年丢掉近三百平方千米!战场转折快到了

七千多次突击几无所得,半年丢掉近三百平方千米!战场转折快到了

鹰眼Defence
2026-06-02 15:41:02
“都把儿子养雌化了!”初中男孩出现雌化现象,家长却执迷不悟

“都把儿子养雌化了!”初中男孩出现雌化现象,家长却执迷不悟

妍妍教育日记
2026-05-29 07:55:13
尼克松问:您有什么特长?毛主席回答后,尼克松向他深深鞠了一躬

尼克松问:您有什么特长?毛主席回答后,尼克松向他深深鞠了一躬

浔阳咸鱼
2026-05-16 11:40:20
伊朗称过去24小时有28艘船通过霍尔木兹海峡

伊朗称过去24小时有28艘船通过霍尔木兹海峡

新华社
2026-05-31 17:00:03
运-15一亮相,俄罗斯才发现自己落后了这么多

运-15一亮相,俄罗斯才发现自己落后了这么多

阿芒娱乐说
2026-06-02 15:24:46
波兰要求泽连斯基道歉

波兰要求泽连斯基道歉

参考消息
2026-06-02 15:25:20
伊朗大量疏通被美以空袭炸毁的地下导弹设施入口,以保证其能持续发射导弹

伊朗大量疏通被美以空袭炸毁的地下导弹设施入口,以保证其能持续发射导弹

每日经济新闻
2026-06-02 12:14:44
美国军火商不装了:如果中国歼-35真装了涡扇19,将是F-35的噩梦

美国军火商不装了:如果中国歼-35真装了涡扇19,将是F-35的噩梦

乡土舒四
2026-06-02 08:57:30
美媒为小卡选三最佳下家!模拟方案:勇士出巴特勒3换1 活塞5换1

美媒为小卡选三最佳下家!模拟方案:勇士出巴特勒3换1 活塞5换1

颜小白的篮球梦
2026-06-02 17:58:47
淮海战役惨败后,王凌云只身脱逃,隐姓埋名潜入深山娶了个村姑

淮海战役惨败后,王凌云只身脱逃,隐姓埋名潜入深山娶了个村姑

磊子讲史
2026-05-29 16:17:30
被北大三次退档的河南考生已顺利硕士毕业,他给了北大乃至整个中国高校一记响亮的耳光!

被北大三次退档的河南考生已顺利硕士毕业,他给了北大乃至整个中国高校一记响亮的耳光!

人间运行手册
2026-05-31 10:02:15
杉杉内斗两败俱伤后,家被安徽国资用70亿“抄”了

杉杉内斗两败俱伤后,家被安徽国资用70亿“抄”了

毒sir财经
2026-06-01 23:15:56
善恶终有报!不顾央视警告,与刘涛传出绯闻的杨烁,终将自食恶果

善恶终有报!不顾央视警告,与刘涛传出绯闻的杨烁,终将自食恶果

圆梦的小老头
2026-06-01 04:51:39
女子蹭卡进山姆待一天,有吃有喝空调还能吹到饱

女子蹭卡进山姆待一天,有吃有喝空调还能吹到饱

映射生活的身影
2026-05-31 21:37:09
7年败光2个亿,邹市明冉莹颖共同发文,终究还是踏出了这一步

7年败光2个亿,邹市明冉莹颖共同发文,终究还是踏出了这一步

林轻吟
2026-02-11 11:29:40
扎心!西媒曝恩里克曾告诉大巴黎主席:姆巴佩在他无法掌控全局

扎心!西媒曝恩里克曾告诉大巴黎主席:姆巴佩在他无法掌控全局

雪狼侃体育
2026-06-02 17:37:07
2026-06-02 18:31:00
孙有匪 incentive-icons
孙有匪
科技
1595文章数 2008关注度
往期回顾 全部

科技要闻

烧掉千亿后,美团、阿里、京东谁先止血?

头条要闻

商标被宣告无效 "壹号土猪"创始人:已向法院提起诉讼

头条要闻

商标被宣告无效 "壹号土猪"创始人:已向法院提起诉讼

体育要闻

1米74的业余联赛替补,在英超踢中卫

娱乐要闻

奚梦瑶何猷君补办婚礼超幸福

财经要闻

锂电“资源墙”高筑 全球性长期博弈开始

汽车要闻

星途神秘新车轮廓曝光 又一款性能SUV要来了?

态度原创

房产
健康
游戏
教育
艺术

房产要闻

5200巨量投资曝光!未来五年,海南格局大变!

干细胞临床研究向患者收费?别踩坑

追求极致真实!《巫师4》启用真实马匹参与动捕

教育要闻

别总怪孩子学习不好!75%的原因不在孩子,而在家长、学校和教育方法

艺术要闻

周杰伦花 1.36 亿拍下这幅画

无障碍浏览 进入关怀版