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. 转:Java中的String,StringBuilder,StringBuffer三者的区别

    最近在学习Java的时候,遇到了这样一个问题,就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下, ...

  2. JavaScrip 入门第一课

    一.代码引入的三种方式 1.直接在head中书写 在head标签里面可以写,在body标签里面也可以写,放到head标签里面和放到body标签里面到底有什么区别,我们后续在讲~ <head> ...

  3. 【Linux基础】crontab定时命令详解

    周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron].cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间.cron的配置文件称为“crontab”,是 ...

  4. socket 如何判断远端服务器的连接状态?连接断开,需重连

    fluent-logger-java is a Java library, to record events via Fluentd, from Java application. https://g ...

  5. 004_浅析Python的GIL和线程安全

    在这里我们将介绍Python的GIL和线程安全,希望大家能从中理解Python里的GIL,以及GIL的前世今生. 对于Python的GIL和线程安全很多人不是很了解,通过本文,希望能让大家对Pytho ...

  6. ORA-19566: exceeded limit of 0 corrupt blocks for file E:\xxxx\<datafilename>.ORA.

    How to Format Corrupted Block Not Part of Any Segment (Doc ID 336133.1) To BottomTo Bottom In this D ...

  7. 数组复制的五种方式(遍历循环一一赋值、System.arraycopy、地址赋值、克隆clone()、Arrays.copyof())

    package com.Summer_0424.cn; import java.util.Arrays; import java.util.concurrent.CopyOnWriteArrayLis ...

  8. Python脱产8期 Day09 2019/4/23

    内存管理 一.引用计数:垃圾回收机制的依据 1.变量的值被引用,该值的引用计数 +12.变量的值被解绑,该值的引用计数 -13.引用计数为0时就会被垃圾回收机制回收 二.引用计数会出现循环引用问题:相 ...

  9. 后端list集合中的数据传递到前台HTML中显示(表格形式)

    关键字:web项目中前后台数据传递问题 在学习web项目的过程中,我们肯定会遇到前后台数据交换问题.这个问题我也思考了很久,今天借此总结一下.由于博主水平有限,如有不当之处,还请大家多多指正,,废话不 ...

  10. jmeter(二十三)分布式测试

    jmeter用了一年多,也断断续续写了一些相关的博客,突然发现没有写过分布式测试的一些东西,这篇博客就介绍下利用jmeter做分布式测试的一些技术点吧,权当参考... 关于jmeter的介绍和元件作用 ...