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. vue开发常见命令

    1.安装脚手架 安装脚手架命令:npm install -global vue-cli 2.升级脚手架 有时候需要把整个脚手架升级一下,这个用到命令npm install --global vue-c ...

  2. 【漫画解读】HDFS存储原理

    根据Maneesh Varshney的漫画改编,以简洁易懂的漫画形式讲解HDFS存储机制与运行原理,非常适合Hadoop/HDFS初学者理解. 一.角色出演 如上图所示,HDFS存储相关角色与功能如下 ...

  3. 12个 Linux 中 grep 命令的超级用法实例

    12个 Linux 中 grep 命令的超级用法实例 你是否遇到过需要在文件中查找一个特定的字符串或者样式,但是不知道从哪儿开始?那么,就请grep来帮你吧. grep是每个Linux发行版都预装的一 ...

  4. 8.04-book

    import requests from lxml import etree from bs4 import BeautifulSoup import json class BookSpider(ob ...

  5. 使用TTS实现Oracle跨版本迁移

    TTS实现数据库迁移,具有速度快.支持跨平台和跨版本等优点.本文记录了用TTS从10g single迁移到11g RAC的过程. Source数据库版本和字符集设置: SQL> select * ...

  6. Egg入门学习(二)---理解service作用

    在上一篇文章 Egg入门学习一 中,我们简单的了解了Egg是什么东西,且能做什么,这篇文章我们首先来看看官网对Egg的整个框架的约定如下,及约定对应的目录是做什么的,来有个简单的理解,注意:我也是按照 ...

  7. C语言之建立线性表

    #include<stdio.h> #include<stdlib.h> #define MaxSize 60 #define ElemType int typedef str ...

  8. 环境配置 jupyter代码自动补全

    自动补全 参考链接: https://www.lefer.cn/posts/15473/

  9. LeetCode11:Container With Most Water

    public int MaxArea(int[] height) { ; ; ; while(start<end) { max=Math.Max(max,Math.Min(height[star ...

  10. UVA12298 Super Poker II

    怎么又是没人写题解的UVA好题,个人感觉应该是生成函数的大板子题了. 直接做肯定爆炸,考虑来一发优化,我们记一个多项式,其中\(i\)次项的系数就表示对于\(i\)这个数有多少种表示方式. 那么很明显 ...