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}";
}
}
 dashboard的授权取决于你的自己的身份认证机制了: 
异常:
日志:
日志:
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使用笔记的更多相关文章

  1. Hangfire 使用笔记

    “巨人们”的地址 Hangfire Mysql: https://github.com/arnoldasgudas/Hangfire.MySqlStorage 在获取set表数据的sql语句有bug ...

  2. Asp-Net-Core开发笔记:集成Hangfire实现异步任务队列和定时任务

    前言 最近把Python写的数据采集平台往.Net Core上迁移,原本的采集任务使用多进程+线程池的方式来加快采集速度,使用Celery作为异步任务队列兼具定时任务功能,这套东西用着还行,但反正就折 ...

  3. Hangfire实战二——为DashBoard页面添加权限认证

    概述 Hangfire Dashboard为我们提供了可视化的对后台任务进行管理的界面,我们可以直接在这个页面上对定时任务进行删除.立即执行等操作,如下图所示: 默认情况下,这个页面只能在部署Hang ...

  4. Hangfire项目实践分享

    Hangfire项目实践分享 目录 Hangfire项目实践分享 目录 什么是Hangfire Hangfire基础 基于队列的任务处理(Fire-and-forget jobs) 延迟任务执行(De ...

  5. git-简单流程(学习笔记)

    这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ...

  6. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  7. SQL Server技术内幕笔记合集

    SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnbl ...

  8. ABP文档 - Hangfire 集成

    文档目录 本节内容: 简介 集成 Hangfire 面板授权 简介 Hangfire是一个综合的后台作业管理器,可以在ABP里集成它替代默认的后台作业管理器,你可以为Hangfire使用相同的后台作业 ...

  9. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

随机推荐

  1. es6拼接字符串``

    不需要任何的加号和引号,全部字符仅仅由一组``符号包裹即可,而放置动态数据或者变量即用${变量}方式即可, 看着是真的一目了然啊,最主要是终于可以摆脱被拼接字符支配的恐惧了,哈哈哈哈.

  2. 小程序背景图片bug

    在pc端调试的时候已经可以看到出现背景图片了,但是在真机调试的时候却发现没有背景图片,那么原因是什么呢?真机调试和vconsole也看不出什么鸟,其实这是小程序的一个bug.另一种说法是:backgr ...

  3. inline-block,一个奇怪的问题:中间div掉下来

    先上代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <tit ...

  4. Java面试知识点之线程篇(二)

    前言:接上篇,这里继续对java线程相关知识点进行总结. 1.notify和notifyall的区别 notify()方法能够唤醒一个正在等待该对象的monitor的线程,当有多个线程都在等待该对象的 ...

  5. Django-rest-framework 接口实现 版本控制 versioning

    版本控制 rest_framework 提供了 5 种版本控制 以及对应的 写法 url的 更改都可以 在 from rest_framework import versioning 中查看 Acce ...

  6. 第二十六篇:USB3.0高带宽ISO(48KBytes/125us)实战

    USB3.1技术已经推出, 10Gbps的速率足以满足数据, HD视频传输的要求. 要步入USB3.1的研发, 还得将USB3.0的基础打扎实. 微软提供的SUPER MUTT仅仅包括一个接口0, 其 ...

  7. [ZJOI2012]灾难

    嘟嘟嘟 偶尔翻到的一道题. 50分暴力很好想,对于每一个点进行一次拓扑排序,然后每一次别memset,只清空走过的点,能拿到70分. 正解好像也挺好想,是一个叫"灭绝树"的东西. ...

  8. 003_webpack 配合babel 将es6转成es5

    今天接触了webpack,第一次使用webpack进行转码,竟然稀里糊涂就成功了,哈哈. 下面附上流程 创建个文件夹,初始化一下,首先全局安装webpack npm install webpack - ...

  9. 联想Y700安装显卡驱动和CUDA8.0

    一显卡驱动安装 1 安装驱动安装软件 2 自动检测下载对应版本驱动 3下载完成后,点击开始,解压出来临时安装文件 由于是临时安装文件,退出就会关闭 4所以在没有关闭情况下,打开重新打开一次setup, ...

  10. day26 Python __getattribute__

    __getattr__#不存在的属性访问,触发__getattr__ class Foo: def __init__(self,x): self.x=x def __getattr__(self, i ...