hangfire使用笔记
1、导入nuget包

2、配置


简单配置后就可以写自己的Job了

注意:Hangfire.RecurringJobExtensions这个扩展支持两种job添加方法:json配置文件和特性。但由于时区使用的是string配置,导致Linux上时区不对,所以扩展一下job的加载方法:

如果不希望在一个job还没执行完成的时候再次进入该job,添加如下过滤器:
/// <summary>
/// 每个job都不可重入过滤器
/// </summary>
public class NotReentryServerHangfireFilter : IServerFilter
{
/// <summary>
/// 判断job是否正在运行
/// </summary>
static ConcurrentDictionary<string, DateTime> JobRunnings = new ConcurrentDictionary<string, DateTime>(); ILogger _logger;
public NotReentryServerHangfireFilter(ILogger<NotReentryServerHangfireFilter> logger)
{
_logger = logger;
} public void OnPerforming(PerformingContext filterContext)
{
var jobId = BuildJobId(filterContext.BackgroundJob);
if(!JobRunnings.TryAdd(jobId, DateTime.Now))
{
filterContext.Canceled = true;
return;
}
_logger.LogInformation($"{jobId} starting...");
} public void OnPerformed(PerformedContext filterContext)
{
var jobId = BuildJobId(filterContext.BackgroundJob);
JobRunnings.TryRemove(jobId, out var tmp);
_logger.LogInformation($"{jobId} finished.");
} public string BuildJobId(BackgroundJob job)
{
return $"{job.Job.Type.FullName}.{job.Job.Method.Name}";
}
}


日志:
public class HangfireLoggerProvider : ILogProvider
{
ILoggerFactory _loggerFactory;
public HangfireLoggerProvider(ILoggerFactory loggerFactory)
{
_loggerFactory = loggerFactory;
} public ILog GetLogger(string name)
{
return new HangfireLogger(_loggerFactory.CreateLogger(name));
}
} public class HangfireLogger : ILog
{
ILogger _logger; public HangfireLogger(ILogger logger)
{
_logger = logger;
} public bool Log(Hangfire.Logging.LogLevel logLevel, Func<string> messageFunc, Exception exception = null)
{
var msg = messageFunc?.Invoke();
if (string.IsNullOrWhiteSpace(msg) && exception == null)
return false; switch (logLevel)
{
case Hangfire.Logging.LogLevel.Trace:
_logger.LogTrace(0, exception, msg);
break;
case Hangfire.Logging.LogLevel.Debug:
_logger.LogDebug(0, exception, msg);
break;
case Hangfire.Logging.LogLevel.Info:
_logger.LogInformation(0, exception, msg);
break;
case Hangfire.Logging.LogLevel.Warn:
_logger.LogWarning(0, exception, msg);
break;
case Hangfire.Logging.LogLevel.Error:
_logger.LogError(0, exception, msg);
break;
case Hangfire.Logging.LogLevel.Fatal:
_logger.LogCritical(0, exception, msg);
break;
default:
break;
} return true;
}
}
hangfire使用笔记的更多相关文章
- Hangfire 使用笔记
“巨人们”的地址 Hangfire Mysql: https://github.com/arnoldasgudas/Hangfire.MySqlStorage 在获取set表数据的sql语句有bug ...
- Asp-Net-Core开发笔记:集成Hangfire实现异步任务队列和定时任务
前言 最近把Python写的数据采集平台往.Net Core上迁移,原本的采集任务使用多进程+线程池的方式来加快采集速度,使用Celery作为异步任务队列兼具定时任务功能,这套东西用着还行,但反正就折 ...
- Hangfire实战二——为DashBoard页面添加权限认证
概述 Hangfire Dashboard为我们提供了可视化的对后台任务进行管理的界面,我们可以直接在这个页面上对定时任务进行删除.立即执行等操作,如下图所示: 默认情况下,这个页面只能在部署Hang ...
- Hangfire项目实践分享
Hangfire项目实践分享 目录 Hangfire项目实践分享 目录 什么是Hangfire Hangfire基础 基于队列的任务处理(Fire-and-forget jobs) 延迟任务执行(De ...
- git-简单流程(学习笔记)
这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- SQL Server技术内幕笔记合集
SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnbl ...
- ABP文档 - Hangfire 集成
文档目录 本节内容: 简介 集成 Hangfire 面板授权 简介 Hangfire是一个综合的后台作业管理器,可以在ABP里集成它替代默认的后台作业管理器,你可以为Hangfire使用相同的后台作业 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
随机推荐
- 一张有料的图片!!!附文件-图片合成器C语言实现算法
凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1.打开F盘,先找两个文件,一个是压缩文件(2.rar),另一个是一张图片(1.jpg),将其放到F盘目录下, ...
- css图片热点链接的设置
一.热点的原理 图片通过usemap="#Map"属性将名称为"Map"的热点区域及连接映射到图片上. 一般来说,图片的usermap属性对应的是map热点的n ...
- (转)ElasticSearch教程——汇总篇
https://blog.csdn.net/gwd1154978352/article/details/82781731 环境搭建篇 ElasticSearch教程——安装 ElasticSearch ...
- mongoDB python 操作
mongoDB python 操作 import pymongo mongo_client = pymongo.MongoClient(host="127.0.0.1",port= ...
- jsp页面无法使用EL
解决:http://blog.csdn.net/caixiexin/article/details/6958199 在web.xml中头部引入,2.3版本不支持EL,2.4默认开启,2.5默认关闭需要 ...
- CAS跳转流程
场景一: 用户先访问广告合同管理系统ADM,去投放广告,之后又去资产系统AMS,查看资产信息. 访问ADM时,用户需要先去CAS登录,之后访问AMS时 1.访问广告合同管理系统ADM: 2.访问AMS ...
- 洛谷P1274-魔术数字游戏
Problem 洛谷P1274-魔术数字游戏 Accept: 118 Submit: 243Time Limit: 1000 mSec Memory Limit : 128MB Probl ...
- 牛客网训练1--------矩阵 (二份+二维矩阵hash)
不懂hash的话:https://www.cnblogs.com/ALINGMAOMAO/p/10345850.html 思路:对于一个大矩阵的每一个子矩阵都对应着一个hash值k, 当k出现2次以上 ...
- 微信硬件平台(七)微信开发--如何存储并定时更新access_token
https://blog.csdn.net/sct_t/article/details/53002611 我们知道请求access_Token会返回这样一个json,包括access_token(凭证 ...
- PHP 2 语句 数据类型 字符串函数 常量
在 PHP 中,有两种基本的输出方法:echo 和 print. 在本教程中,我们几乎在每个例子中都会用到 echo 和 print.因此,本节为您讲解更多关于这两条输出语句的知识. PHP echo ...