Asp .Net Core 系列:Asp .Net Core 集成 Hangfire+MySQL
简介
在 .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 负责检查持久存储中排队的后台作业,并以可靠的方式执行它们。排队作业由专用的工作线程池处理。
优点
- 简单易用:Hangfire 提供了一个简洁的 API,开发者只需要几行代码就可以完成任务的调度。例如,你可以使用
BackgroundJob.Enqueue方法将任务加入队列,使用BackgroundJob.Schedule方法来设定一个未来时间点执行的任务。 - 强大的任务调度能力:Hangfire 支持多种任务调度方式,包括定时任务、轮询任务、一次性任务等。它还提供了灵活的任务调度策略,如固定间隔、轮询等,可以满足不同场景的需求。
- 可扩展性:Hangfire 可以很容易地集成到现有的.NET 应用程序中,并且可以与其他流行的.NET 库和框架(如 Autofac、Ninject 等)一起使用。此外,Hangfire 支持基于队列的任务处理,任务执行不是同步的,而是放到一个持久化队列中,以便马上把请求控制权返回给调用者。
- 任务持久化:Hangfire 提供了任务持久化的功能,确保任务在应用程序重启后依然可以执行。这使得 Hangfire 在处理周期性任务或需要长时间运行的任务时非常可靠。
- 日志和监控功能:Hangfire 提供了详细的日志和监控功能,便于开发者跟踪和管理任务执行情况。这有助于开发者及时发现和解决问题,提高应用程序的稳定性和性能。
- 支持多种消息队列: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的更多相关文章
- [ASP.NET MVC2 系列] ASP.Net MVC教程之《在15分钟内用ASP.Net MVC创建一个电影数据库应用程序》
[ASP.NET MVC2 系列] [ASP.NET MVC2 系列] ASP.Net MVC教程之<在15分钟内用ASP.Net MVC创建一个电影数据库应用程序> ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - 集成Hangfire实现定时任务处理
上一篇文章(https://www.cnblogs.com/meowv/p/12956696.html)成功使用了Redis缓存数据,大大提高博客的响应性能. 接下来,将完成一个任务调度中心,关于定时 ...
- 跨平台应用集成(在ASP.NET Core MVC 应用程序中集成 Microsoft Graph)
作者:陈希章 发表于 2017年6月25日 谈一谈.NET 的跨平台 终于要写到这一篇了.跨平台的支持可以说是 Office 365 平台在设计伊始就考虑的目标.我在前面的文章已经提到过了,Micro ...
- asp.net core 系列 18 web服务器实现
一. ASP.NET Core Module 在介绍ASP.NET Core Web实现之前,先来了解下ASP.NET Core Module.该模块是插入 IIS 管道的本机 IIS 模块(本机是指 ...
- asp.net core 系列 16 Web主机 IWebHostBuilder
一.概述 在asp.net core中,Host主机负责应用程序启动和生存期管理.host主机包括Web 主机(IWebHostBuilder)和通用主机(IHostBuilder).Web 主机是适 ...
- Asp.net Core 系列之--5.认证、授权与自定义权限的实现
ChuanGoing 2019-11-24 asp.net core系列已经来到了第五篇,通过之前的基础介绍,我们了解了事件订阅/发布的eventbus整个流程,初探dapper ORM实现,并且简单 ...
- 【目录】asp.net core系列篇
随笔分类 - asp.net core系列篇 asp.net core系列 68 Filter管道过滤器 摘要: 一.概述 本篇详细了解一下asp.net core filters,filter叫&q ...
- Taurus.MVC 微服务框架 入门开发教程:项目集成:2、客户端:ASP.NET Core(C#)项目集成:应用中心。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...
- 基于Asp.Net Core Mvc和EntityFramework Core 的实战入门教程系列-1
来个目录吧: 第一章 第二章 第三章 暂时就这么多.后面路线更新吧 本系列文章为翻译加上我个人的使用心得理解,希望帮助热爱学习的程序员. 珍重声明:本系列文章会跟原文有点出入,去掉了罗里吧嗦的文字. ...
- ASP.NET CORE系列【一】搭建ASP.NET CORE项目
为什么要使用 ASP.NET Core? NET Core 刚发布的时候根据介绍就有点心里痒痒,微软的尿性都懂的,新东西bug太多,现在2.0也发布很久了,决定研究一下. ASP.NET Core官方 ...
随机推荐
- Linux 应用Kickstart部署系统
Kickstart 是一种无人值守系统安装方式,其工作原理是预先把原本需要运维人员手工填写的参数保存成文件,当安装过程中需要填写参数时则自动匹配Kickstart生成的文件,所以只要文件内包含了安装过 ...
- 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 ...
- 5个.NET开源且强大的快速开发框架(帮助你提高生产效率)
中台Admin(Admin.Core) 中台Admin(Admin.Core)是前后端分离权限管理系统,前端 UI 基于Vue3开发,后端 Api 基于.NET 8.0开发.支持多租户.接口权限.数据 ...
- .NET中使用BootstrapBlazor组件库Table实操篇
前言 Table表格在后台管理应用中使用的是相当频繁的,因此找一个功能齐全的前端框架对于我们而言是非常必要的,因为封装完善的前端框架能够大大提升我们的工作对接效率.今天我们主要来讲解一下在.NET中使 ...
- 当我们在谈 .NET Core 跨平台时,我们在谈些什么?--学习笔记
摘要 .NET Framework在过去十多年在跨平台上的尝试. .NET Core跨平台的实现有何不同? 基于 .NET Standard的平台兼容性是如何实现的? 讲师介绍 历史枷锁 .NET F ...
- Git操作--Pycharm
声明: 1)仅作为个人学习,如有冒犯,告知速删! 2)不想误导,如有错误,不吝指教! 一--在idea中配置git: 1. 更改git的安装路径:file-->settings,找到versio ...
- JOISC 2023 纪录
记录一下 JOISC 2023 的做题记录 Day1 T1 Two Currencies 给定一棵树,在边上有总计 \(m\) 个检查站,经过一个检查站需要叫 \(1\) 枚金币或者若干枚银币.\(Q ...
- NC19910 [CQOI2007]矩形RECT
题目链接 题目 题目描述 给一个a*b矩形,由a*b个单位正方形组成.你需要沿着网格线把它分成分空的两部分,每部分所有格子连通,且至少有一个格子在原矩形的边界上."连通"是指任两个 ...
- python 学习随笔1121
Python 数据处理几个好用又简单的库: json re string pandas 与系统交互: subprocess os
- Django实战之文件上传下载
项目介绍 最近学习django,通过文件上传下载这个小项目,总结下常用的知识点. 做这个案例我有以下需求: 1.要支持一次上传多个文件 2.支持上传后记录上传的数据以及列表展示 3.支持下载和删除文件 ...