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官方 ...
随机推荐
- PCIe Gen 4 SSD主控大盘点:7000MB/s高速时代,到底谁能称王?
[硬件编年史]自2006年世界上第一款搭载固态硬盘的电脑诞生之后,消费级SSD经过十几年的发展,从一开始的SATA 6Gbps SSD,到坚挺了十年的PCIe Gen 3 SSD,再到PCIe Gen ...
- HttpClientTemplate JDK11以上的版本,可以用,我写的。
package com.diandaxia.common.template; import com.fasterxml.jackson.databind.ObjectMapper; import or ...
- .NET Core开发实战(第27课:定义Entity:区分领域模型的内在逻辑和外在行为)--学习笔记
27 | 定义Entity:区分领域模型的内在逻辑和外在行为 上一节讲到领域模型分为两层 一层是抽象层,定义了公共的接口和类 另一层就是领域模型的定义层 先看一下抽象层的定义 1.实体接口 IEnti ...
- MongoDB Security
1. Security MongoDB提供了一系列的保护措施,以保护它自身安全: 启用访问控制并实行身份验证 MongoDB支持多种身份认证机制,默认的认证机制是SCRAM 配置基于角色的访问控制 ...
- 基于keras的双层LSTM网络和双向LSTM网络
1 前言 基于keras的双层LSTM网络和双向LSTM网络中,都会用到 LSTM层,主要参数如下: LSTM(units,input_shape,return_sequences=False) un ...
- ElementUI导出表格数据为Excel文件
功能介绍 将列表的数据导出成excel文件是管理系统中非常常见的功能.最近正好用到了ElementUI+Vue的组合做了个导出效果,拿出来分享一下,希望可以帮到大家:) 实现效果 实现步骤 1.定义导 ...
- 4.1k Star!全面的C#/.NET/.NET Core学习、工作、面试指南
C#/.NET/.NET Core 学习.工作.面试指南 让现在的自己不再迷茫 . GitHub 开源地址:https://github.com/YSGStudyHards/DotNetGuide D ...
- C++ 多线程的错误和如何避免(4)
对共享的资源或者数据做加锁处理 在多线程的环境下,有时需要多个线程对同一个资源或者数据进行操作,如果没有加锁,容易出现未定义的行为. 比如: #include <iostream> #in ...
- java数组实现的超市管理系统(控制台)
说明:使用数组存储数据,针对用户功能1:增加用户2:删除用户3:修改用户:针对商品功能:1.显示所有商品2.修改商品信息3.添加商品信息4.删除商品信息5.查询商品信息 效果展示 ========== ...
- 问题:AttributeError: module 'lib' has no attribute 'OpenSSL_add_all_algorithms'
分析 在使用支付宝沙箱时,报了这个错误,该问题是没有安装openssl包 解决 pip3 install pyOpenSSL 安装后再次运行如果还是报错,请降低加密库 pip install cryp ...