C# .net6使用Hangfire

news2024/9/22 11:27:25

首先我们先来了解什么是Hangfire?

Hangfire 是一个用于 .NET 的任务调度库,允许你在后台运行任务,而不需要依赖外部的任务队列服务或复杂的基础设施。它简化了后台任务的创建、调度和管理过程,使得在 .NET 应用程序中处理长期运行的任务变得更加容易和可靠。目前1.6+版本已支持.NET Core、.Net 5+。个人认为它最大特点在于内置提供集成化的控制台,方便后台查看及监控。

主要特性

1.简单易用:Hangfire 提供了简单的 API 来创建、调度和管理后台任务。你只需用简单的代码调用 Hangfire 的方法即可创建和管理任务。

2.持久化存储:Hangfire 支持将任务信息存储到多种数据库中,包括 SQL Server、Redis、MongoDB 等。任务的状态、失败记录和其他信息都可以持久化到这些存储中,以便任务可以在系统重启后恢复。

3.任务调度:Hangfire 支持多种调度策略,包括立即执行、延迟执行、重复执行和定时任务等。你可以使用简单的表达式或代码来指定任务的调度规则。

4.任务监控:Hangfire 提供了一个内置的仪表板,用于监控任务的状态、查看任务执行历史、管理失败的任务等。这使得你可以很方便地跟踪任务的执行情况。

5.任务重试:如果任务失败,Hangfire 可以自动重试任务,并且支持自定义重试策略。

6.任务分布式处理:Hangfire 可以在多个服务器或进程之间分配任务,使得任务处理可以横向扩展,从而提高处理能力和可靠性。

应用场景

Hangfire 适用于各种需要后台任务处理的场景,包括但不限于:

定时任务:执行定期的维护任务、生成报告、同步数据等。
异步任务处理:处理用户上传的文件、发送电子邮件、生成复杂的数据处理等。
后台工作:在后台处理长时间运行的任务,而不阻塞用户请求的执行。
任务调度和管理:创建、管理和监控任务,确保任务按照预期的时间和频率执行。

使用Hangfire

本文以.net6示例

安装 Hangfire

控制台安装

Install-Package Hangfire.Core
Install-Package Hangfire.Dashboard.BasicAuthorization
Install-Package Hangfire.HttpJob
Install-Package Hangfire.SqlServer

包管理器安装
在这里插入图片描述

配置Hangfire

Program.cs文件中 添加以下代码

using Hangfire;
using Hangfire.Dashboard.BasicAuthorization;
using Hangfire.SqlServer;


var builder = WebApplication.CreateBuilder(args);
//添加hangfire服务
builder.Services.AddHangfire(configuration => configuration
    .SetDataCompatibilityLevel(CompatibilityLevel.Version_170) // 设置数据兼容性级别为 1.7 版本
    .UseSimpleAssemblyNameTypeSerializer() // 使用简单的程序集名称类型序列化器
    .UseRecommendedSerializerSettings() // 使用推荐的序列化器设置
    .UseSqlServerStorage(builder.Configuration.GetConnectionString("HangfireConnection"), new SqlServerStorageOptions
    {//持久化
        CommandBatchMaxTimeout = TimeSpan.FromMinutes(5), // 批处理作业的最大超时时间为 5 分钟
        SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5), // 作业的可见性超时时间为 5 分钟
        QueuePollInterval = TimeSpan.FromSeconds(5), // 检查作业队列的间隔时间为 5 秒
        JobExpirationCheckInterval = TimeSpan.FromHours(1),//- 作业到期检查间隔(管理过期记录)。默认值为1小时。
        CountersAggregateInterval = TimeSpan.FromMinutes(5),//- 聚合计数器的间隔。默认为5分钟。
        //DashboardJobListLimit=5000,//- 仪表板作业列表限制。默认值为50000。
        TransactionTimeout = TimeSpan.FromMinutes(1),//- 交易超时。默认为1分钟。
        UseRecommendedIsolationLevel = true, // 使用推荐的事务隔离级别
        DisableGlobalLocks = true // 禁用全局锁定机制
    }));

builder.Services.AddHangfireServer(); // 添加 Hangfire 服务器


var app = builder.Build();
//启用仪表盘
app.UseHangfireDashboard("/hangfire", new DashboardOptions
{
    Authorization = new[] {new BasicAuthAuthorizationFilter(new BasicAuthAuthorizationFilterOptions
    {
        RequireSsl = false,       // 是否需要SSL连接,默认为false
        SslRedirect = false,      // 是否启用SSL重定向,默认为false
        LoginCaseSensitive = true, // 登录名是否区分大小写,默认为true
        //Users = new BasicAuthAuthorizationUser[] {},  //未设置登录凭据
        Users = new []
        {
            new BasicAuthAuthorizationUser
            {
                Login = "admin",      // 管理员登录名
                PasswordClear = "123456"  // 管理员密码
            }
        }
    })},
    IsReadOnlyFunc = (context) => false  // 设置仪表盘为可写模式
});

appsettings.json文件中配置链接数据库的信息

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning"
      //"Microsoft.AspNetCore": "Warning",
      //"Microsoft.AspNetCore.HttpLogging.HttpLoggingMiddleware": "Information"
    }
  },
  "ConnectionStrings": {
    "Default": "Server=127.0.0.1;database=test; Persist Security Info=True;User ID=sa;Password=123;Packet Size=512;Encrypt=True;TrustServerCertificate=True;MultipleActiveResultSets=True",
    "HangfireConnection": "server=127.0.0.1;database=test;uid=sa;pwd=123;TrustServerCertificate=true"
  },
  "AllowedHosts": "*"
}

创建任务调度

Program.cs文件中 添加以下代码。在程序启动前,也就是在app.Run();之前

//RecurringJob.AddOrUpdate("每分钟执行一次", () => Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")), Cron.Minutely());
RecurringJob.AddOrUpdate<IBackgroundAuditTasksService>("review", e => e.BackendReviewAsync(), "*/2 * * * *");//每两分钟执行一次任务
app.Run();

编写任务接口

namespace test.Application.Interface.demo
{
    public interface IBackgroundAuditTasksService
    {
        /// <summary>
        /// 后台审核
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task BackendReviewAsync();
    }
}

实现接口

namespace test.Application.ServiceImplementation.demo
{
    public class BackgroundAuditTasksService : IBackgroundAuditTasksService
    {
        private readonly ICache _cache;
        public BackgroundAuditTasksService(
            ICache cache)
        {
            _cache = cache;
        }
        public async Task BackendReviewAsync()
        {
            //throw new NotImplementedException();
            await TestAsync();
        }

        public async Task TestAsync()
        {
            //Do something
        }

    }
}

在程序启动时会自动创建Hangfire数据库
在这里插入图片描述

访问仪表盘

访问 http://ip:port/hangfire 可以查看任务的状态和历史记录等信息。
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1921614.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《mysql篇》--JDBC编程

JDBC是什么 JDBC就是Java DataBase Connectivity的缩写&#xff0c;翻译过来就很好理解了&#xff0c;就是java连接数据库。所以顾名思义&#xff0c;JDBC就是一种用于执行SQL语句的JavaApl&#xff0c;是Java中的数据库连接规范。为了可以方便的用Java连接各种数据库&#xff…

MURF1660CT-ASEMI智能AI应用MURF1660CT

编辑&#xff1a;ll MURF1660CT-ASEMI智能AI应用MURF1660CT 型号&#xff1a;MURF1660CT 品牌&#xff1a;ASEMI 封装&#xff1a;TO-220F 批号&#xff1a;最新 恢复时间&#xff1a;35ns 最大平均正向电流&#xff08;IF&#xff09;&#xff1a;16A 最大循环峰值反向…

【学术会议征稿】第五届智能设计国际会议(ICID 2024)

第五届智能设计国际会议&#xff08;ICID 2024&#xff09; 2024 5th International Conference on Intelligent Design (ICID 2024) 为贯彻落实国家创新驱动发展战略&#xff0c;积极服务秦创原创新驱动平台建设&#xff0c;助力区域经济高质量创新发展&#xff0c;西安设计联…

nVisual光纤资源管理APP价值分析

nVisual光纤资源管理APP利用数字孪生技术&#xff0c;可以快速创建光纤资源的数字孪生空间&#xff0c;解决“排查难”和“跟踪难”的问题。提供了预先在数字空间进行智能规划模拟变更、自动生成实施步骤和材料清单等功能&#xff0c;大幅度提高了规划的效率与准确性&#xff0…

uniapp实现光标闪烁(配合自己的键盘)

前言 因为公司业务需要&#xff0c;所以我们... 演示 其实就是Chat自动打字效果 代码 键盘请看这篇文件 <template> <view class"list"><view class"title"><text>手机号码</text></view><view class"ty…

怎么提高图片亮度?这四种方法轻松提高图片亮度!

怎么提高图片亮度&#xff1f;在数字图像处理的世界里&#xff0c;图片亮度不足的问题常常如暗夜的阴影般困扰着我们&#xff0c;这一问题不容忽视&#xff0c;因为它犹如一颗定时炸弹&#xff0c;随时可能引发一系列连锁反应&#xff0c;首先&#xff0c;亮度不足的图片如同被…

【轻松拿捏 】Java-static关键字(面试)

Java-static关键字 1. 定义和基本概念 回答要点&#xff1a; 示例回答&#xff1a; 2. static 变量 回答要点&#xff1a; 示例回答&#xff1a; 代码示例&#xff1a; 3. static方法 回答要点&#xff1a; 示例回答&#xff1a; 代码示例&#xff1a; 4. static 代…

Armv8-R内存模型详解

目录 1.内存模型的必要性 2.Armv8-R内存模型分类 2.1 Normal memory 2.2 Device Memory 2.2.1 Gathering 2.2.2 Reordering 2.2.3 Early Write Acknowledgement 3.小结 大家好&#xff0c;今天是悲伤的肌肉。 在调研区域控制器芯片时&#xff0c;发现了S32Z、Stellar …

威纶通触摸屏连接MySQL数据库步骤

目录 概要威纶通支持数据库的触摸屏类型测试Step 1 选择触摸屏型号Step 2 新增数据库服务器Step 3 添加SQL数据库查询功能Step 4 仿真测试 概要 通过使用威纶通带数据库类型的触摸屏&#xff0c;实现连接本地/远程MySQL数据库&#xff0c;并实现数据查询功能 威纶通支持数据库…

【开发环境】搭建PX4+ROS2+MAVROS2+Simulink+Optitrack实物联合仿真环境

搭建PX4ROS2MAVROS2SimulinkOptiTrack实物联合仿真环境 Ubuntu中的安装过程下载并编译PX4固件代码安装ROS2安装VRPN动捕数据转换ROS2话题库安装VRPN库拉取vrpn_client_ros2节点代码并配置VRPN server参数编译软件包启动vrpn_client_ros2节点重命名话题名 /vrpn/fly/pose 为 /ma…

Python爬虫新手实战导航:精选示例项目助你快速上手Python爬虫(含几十个案例源码)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 Python爬虫 📒📝 爬虫小案例(附源码)📝 如何利用这些示例项目进行学习?🎈 获取方式 🎈⚓️ 相关链接 ⚓️📖 介绍 📖 对于Python初学者而言,理论学习固然重要,但若想真正掌握爬虫技术,大量的实际项目训练和…

一篇喂饭级教程Python时序预测常用方法以及代码演示

在时序预测中,常用的方法包括以下几种&#xff1a; A.移动平均法 B.指数平滑法 C.自回归(AR)模型 D.滑动平均(MA)模型 E.自回归滑动平均(ARMA)模型 F.长短期记忆网络(LSTM) 下面我将逐一展示每种方法的代码示例&#xff1a; 1.移动平均法 import numpy as np# 创建时间…

华润万家超市购物卡怎么使用?

前两天整理杂物&#xff0c;翻出来两张华润的礼品卡&#xff0c;好在还没有过期 但是那卡只能在线下使用&#xff0c;而且面值也就一百 让我专门跑一趟华润感觉太不方便了 最后朋友告诉我说&#xff0c;可以在收卡云上面把卡内的余额直接提出来&#xff0c;我两张一百的卡总…

开放式耳机哪款性价比高?这五款超值精品不容错过

喜欢进行户外运动的小伙伴们&#xff0c;应该都很需要一款既可以匹配运动场景&#xff0c;又兼顾音质体验的无线蓝牙耳机吧。而开放式耳机拥有佩戴舒适牢固&#xff0c;不堵塞耳部&#xff0c;不影响外部声音传入耳部的优点&#xff0c;完全可以成为运动健身人士户外运动的好伴…

XCP协议介绍(二)

五、XCP命令简介 5.1 数据包简介 XCP的数据包分为两类&#xff1a;CTO(Command Transfer Object)与DTO(Data Transfer Object) CMD&#xff1a;指的是上位机下发给下位机的一些命令&#xff0c;比如连接命令FF&#xff0c;解锁&#xff0c;获取状态等一些和下位机交互的命令&…

【算法题】小红的区间翻转

题目 解题思路 第一想法&#xff1a;暴力&#xff1f; 第一个想法就是写一个验证翻转的函数&#xff0c;然后暴力遍历两遍 验证翻转的函数是这样写的&#xff0c;先克隆&#xff0c;再翻转对应区间&#xff0c;最后用equals判断 public static boolean isValidFlip(int[] a, …

Nodejs 第八十六章(部署pm2)

Node.js如何部署? 如果要部署Nodejs项目&#xff0c;第一点肯定是需要有台服务器&#xff0c;第二点需要一个部署工具这里使用pm2 PM2 PM2 是一个非常流行的 Node.js 进程管理工具&#xff0c;用于在生产环境中运行和监控 Node.js 应用程序。它提供了多种功能&#xff0c;帮…

[数仓]四、离线数仓(Hive数仓系统-续)

第8章 数仓搭建-DWT层 8.1 访客主题 1)建表语句 DROP TABLE IF EXISTS dwt_visitor_topic; CREATE EXTERNAL TABLE dwt_visitor_topic (`mid_id` STRING COMMENT 设备id,`brand` STRING COMMENT 手机品牌,`model` STRING COMMENT 手机型号,`channel` ARRAY<STRING> C…

Visual Studio远程调试工具

路径&#xff1a;安装路径/Common7/IDE/Remote Debugger/平台/msvsmon.exe。 平台有x86、x64&#xff0c;x64即可调试x86进程也可调试x64进程。 将平台路径下的所有文件拷贝至其他PC&#xff0c;运行msvsmon.exe。 工具栏选择“工具&#xff08;T&#xff09;”选择“选项“&…

基于STM32的RFID公交充值消费系统

1.简介 基于RFID技术的公交卡充值消费系统&#xff0c;以其高效快速、安全可靠、方便快捷、易于管理和环保节能等特点&#xff0c;为用户带来优质的公交出行体验。通过非接触式的数据读写&#xff0c;该系统实现了快速充值和消费&#xff0c;同时采用先进的加密和防碰撞算法确保…