简介

https://www.hangfire.io/

在 .NET 和 .NET Core 应用程序中执行后台处理的简单方法,无需 Windows 服务或单独的进程。

Hangfire 是一个开源的.NET 任务调度框架,它提供了内置集成化的控制台,允许用户直观明了地查看作业调度情况。Hangfire 不需要依赖于单独的应用程序执行(如 Windows 服务或 Windows 计划任务),支持持久性存储,并且是开源且免费用于商业用途的。

Hangfire 的核心组件包括客户端、持久化存储和服务端。它基于队列的任务处理机制,客户端使用 BackgroundJob 类的静态方法 Enqueue 来调用指定的方法或匿名函数,并将任务持久化到数据库。一旦任务被持久化,Hangfire 服务端会立即从数据库获取相关任务并装载到相应的 Job Queue 下进行处理。如果任务执行过程中没有异常,则仅处理一次;若发生异常,Hangfire 提供了自动重试功能,异常及重试信息都会被记录到数据库中,用户可以通过 Hangfire 控制面板查看这些信息。

Hangfire 适用于大多数.NET 平台,包括.NET Framework 4.5 或更高版本、.NET Core 1.0 或更高版本,以及与.NET Standard 1.3 兼容的任何平台。另一个关键组件 Hangfire Server 负责检查持久存储中排队的后台作业,并以可靠的方式执行它们。排队作业由专用的工作线程池处理。

优点

  1. 简单易用:Hangfire 提供了一个简洁的 API,开发者只需要几行代码就可以完成任务的调度。例如,你可以使用BackgroundJob.Enqueue方法将任务加入队列,使用BackgroundJob.Schedule方法来设定一个未来时间点执行的任务。
  2. 强大的任务调度能力:Hangfire 支持多种任务调度方式,包括定时任务、轮询任务、一次性任务等。它还提供了灵活的任务调度策略,如固定间隔、轮询等,可以满足不同场景的需求。
  3. 可扩展性:Hangfire 可以很容易地集成到现有的.NET 应用程序中,并且可以与其他流行的.NET 库和框架(如 Autofac、Ninject 等)一起使用。此外,Hangfire 支持基于队列的任务处理,任务执行不是同步的,而是放到一个持久化队列中,以便马上把请求控制权返回给调用者。
  4. 任务持久化:Hangfire 提供了任务持久化的功能,确保任务在应用程序重启后依然可以执行。这使得 Hangfire 在处理周期性任务或需要长时间运行的任务时非常可靠。
  5. 日志和监控功能:Hangfire 提供了详细的日志和监控功能,便于开发者跟踪和管理任务执行情况。这有助于开发者及时发现和解决问题,提高应用程序的稳定性和性能。
  6. 支持多种消息队列:Hangfire 支持多种消息队列,如 SQL Server、RabbitMQ 和 Redis 等,这为用户提供了更多的选择和灵活性。

Asp .Net Core 集成 Hangfire+MySQL

1. 安装必要的 NuGet 包

首先,你需要安装 Hangfire 相关的 NuGet 包,以及 Hangfire 的 MySQL 存储包。

使用 NuGet 包管理器控制台 (Package Manager Console) 或 Visual Studio 的 NuGet 包管理器来安装以下包:

Install-Package Hangfire.AspNetCore
Install-Package Hangfire.MySqlStorage

2. 配置 Hangfire 使用 MySQL 存储

Startup.cs 文件的 ConfigureServices 方法中,配置 Hangfire 以使用 MySQL 作为其后端存储。

            builder.Services.AddHangfire(config =>
{
config.SetDataCompatibilityLevel(CompatibilityLevel.Version_180)
.UseSimpleAssemblyNameTypeSerializer()
.UseRecommendedSerializerSettings(); config.UseStorage(
new MySqlStorage(
@"server=127.0.0.1;user=root;password=123456;database=hangfire;allowuservariables=True;",
//必须允许用户自定义参数,不然面板不能使用
new MySqlStorageOptions()));
}); builder.Services.AddHangfireServer();
builder.Services.AddTransient<IBackgroundJobClient, BackgroundJobClient>();

确保将 MySQL 连接字符串替换为你自己的数据库连接信息。

3. 配置 Hangfire Dashboard(可选)

如果你想使用 Hangfire Dashboard 来查看和管理后台任务,你需要在 Configure 方法中添加相应的中间件。

app.UseHangfireDashboard();

现在,你可以通过访问 /hangfire 路径来查看 Hangfire Dashboard。

MisfireHandlingMode(失火处理模式)

  • Relaxed:默认模式。指定只创建一个后台作业,不管错过了多少次都不创建。后台的“时间”参数作业将指向安排后台作业的时间。
  • Strict:指定将为每个错过的事件创建新的后台作业,并将“时间”参数设置为相应的计划时间。
  • Ignorable:指定不应在错过的计划中创建任何后台作业,无论错过的次数如何。

案例

即发即弃作业

WeatherForecast weather = new WeatherForecast();
BackgroundJob.Enqueue(() => HelloJob.Test4(weather));

延迟作业

BackgroundJob.Schedule(() => HelloJob.Test2("Test2"), TimeSpan.FromMinutes(1));

重复作业

            RecurringJob.AddOrUpdate("static-job", () => HelloJob.Test2(DateTime.Now.ToLongTimeString()), "0 * * * * ?", new RecurringJobOptions()
{
MisfireHandling = MisfireHandlingMode.Ignorable,
TimeZone = TimeZoneInfo.Local,
}); RecurringJob.AddOrUpdate<IOCJob>("ioc-job", job => job.Test(), "0 * * * * ?");

延续作业

            var jobId = BackgroundJob.Enqueue(() => HelloJob.Test1());
BackgroundJob.ContinueJobWith(jobId, () => HelloJob.Test2("Test3"));

Asp .Net Core 系列:Asp .Net Core 集成 Hangfire+MySQL的更多相关文章

  1. [ASP.NET MVC2 系列] ASP.Net MVC教程之《在15分钟内用ASP.Net MVC创建一个电影数据库应用程序》

    [ASP.NET MVC2 系列]      [ASP.NET MVC2 系列] ASP.Net MVC教程之<在15分钟内用ASP.Net MVC创建一个电影数据库应用程序>       ...

  2. 基于 abp vNext 和 .NET Core 开发博客项目 - 集成Hangfire实现定时任务处理

    上一篇文章(https://www.cnblogs.com/meowv/p/12956696.html)成功使用了Redis缓存数据,大大提高博客的响应性能. 接下来,将完成一个任务调度中心,关于定时 ...

  3. 跨平台应用集成(在ASP.NET Core MVC 应用程序中集成 Microsoft Graph)

    作者:陈希章 发表于 2017年6月25日 谈一谈.NET 的跨平台 终于要写到这一篇了.跨平台的支持可以说是 Office 365 平台在设计伊始就考虑的目标.我在前面的文章已经提到过了,Micro ...

  4. asp.net core 系列 18 web服务器实现

    一. ASP.NET Core Module 在介绍ASP.NET Core Web实现之前,先来了解下ASP.NET Core Module.该模块是插入 IIS 管道的本机 IIS 模块(本机是指 ...

  5. asp.net core 系列 16 Web主机 IWebHostBuilder

    一.概述 在asp.net core中,Host主机负责应用程序启动和生存期管理.host主机包括Web 主机(IWebHostBuilder)和通用主机(IHostBuilder).Web 主机是适 ...

  6. Asp.net Core 系列之--5.认证、授权与自定义权限的实现

    ChuanGoing 2019-11-24 asp.net core系列已经来到了第五篇,通过之前的基础介绍,我们了解了事件订阅/发布的eventbus整个流程,初探dapper ORM实现,并且简单 ...

  7. 【目录】asp.net core系列篇

    随笔分类 - asp.net core系列篇 asp.net core系列 68 Filter管道过滤器 摘要: 一.概述 本篇详细了解一下asp.net core filters,filter叫&q ...

  8. Taurus.MVC 微服务框架 入门开发教程:项目集成:2、客户端:ASP.NET Core(C#)项目集成:应用中心。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...

  9. 基于Asp.Net Core Mvc和EntityFramework Core 的实战入门教程系列-1

    来个目录吧: 第一章 第二章 第三章 暂时就这么多.后面路线更新吧 本系列文章为翻译加上我个人的使用心得理解,希望帮助热爱学习的程序员. 珍重声明:本系列文章会跟原文有点出入,去掉了罗里吧嗦的文字. ...

  10. ASP.NET CORE系列【一】搭建ASP.NET CORE项目

    为什么要使用 ASP.NET Core? NET Core 刚发布的时候根据介绍就有点心里痒痒,微软的尿性都懂的,新东西bug太多,现在2.0也发布很久了,决定研究一下. ASP.NET Core官方 ...

随机推荐

  1. Linux 应用Kickstart部署系统

    Kickstart 是一种无人值守系统安装方式,其工作原理是预先把原本需要运维人员手工填写的参数保存成文件,当安装过程中需要填写参数时则自动匹配Kickstart生成的文件,所以只要文件内包含了安装过 ...

  2. nodejs连接mysql报错:throw err; // Rethrow non-MySQL errors TypeError: Cannot read property 'query' of undefined

    该问题的解决方案如下: win+R 输入cmd mysql -u root -p 输入密码进入到mysql 3.执行sql语句,将密码改成123456(自己可以记住的密码即可) alter user ...

  3. 5个.NET开源且强大的快速开发框架(帮助你提高生产效率)

    中台Admin(Admin.Core) 中台Admin(Admin.Core)是前后端分离权限管理系统,前端 UI 基于Vue3开发,后端 Api 基于.NET 8.0开发.支持多租户.接口权限.数据 ...

  4. .NET中使用BootstrapBlazor组件库Table实操篇

    前言 Table表格在后台管理应用中使用的是相当频繁的,因此找一个功能齐全的前端框架对于我们而言是非常必要的,因为封装完善的前端框架能够大大提升我们的工作对接效率.今天我们主要来讲解一下在.NET中使 ...

  5. 当我们在谈 .NET Core 跨平台时,我们在谈些什么?--学习笔记

    摘要 .NET Framework在过去十多年在跨平台上的尝试. .NET Core跨平台的实现有何不同? 基于 .NET Standard的平台兼容性是如何实现的? 讲师介绍 历史枷锁 .NET F ...

  6. Git操作--Pycharm

    声明: 1)仅作为个人学习,如有冒犯,告知速删! 2)不想误导,如有错误,不吝指教! 一--在idea中配置git: 1. 更改git的安装路径:file-->settings,找到versio ...

  7. JOISC 2023 纪录

    记录一下 JOISC 2023 的做题记录 Day1 T1 Two Currencies 给定一棵树,在边上有总计 \(m\) 个检查站,经过一个检查站需要叫 \(1\) 枚金币或者若干枚银币.\(Q ...

  8. NC19910 [CQOI2007]矩形RECT

    题目链接 题目 题目描述 给一个a*b矩形,由a*b个单位正方形组成.你需要沿着网格线把它分成分空的两部分,每部分所有格子连通,且至少有一个格子在原矩形的边界上."连通"是指任两个 ...

  9. python 学习随笔1121

    Python 数据处理几个好用又简单的库: json re string pandas 与系统交互: subprocess os

  10. Django实战之文件上传下载

    项目介绍 最近学习django,通过文件上传下载这个小项目,总结下常用的知识点. 做这个案例我有以下需求: 1.要支持一次上传多个文件 2.支持上传后记录上传的数据以及列表展示 3.支持下载和删除文件 ...