C# .net6使用Hangfire

首先我们先来了解什么是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连接,默认为falseSslRedirect = false,      // 是否启用SSL重定向,默认为falseLoginCaseSensitive = 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.mzph.cn/diannao/45705.shtml

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

相关文章

flutter Android端权限

flutter 中权限请求path_provider Android 6.0 - 10.0 (API level 23 - 29)Android 11 (API level 30)具体实现示例注意事项 在 Flutter 中使用 path_provider 插件获取除本应用外所有的 PDF 文件&#xff0c;对于不同的 Android 版本&#xff08;从 Android 6.0 到 Android 14…

我不是一个人在战斗

这也是一个老生常谈的话题&#xff0c;但很多人还是出不出单兵作战的怪圈&#xff0c;不断让单兵作战的孤独感、团队协作的无助感困惑自己&#xff0c;困惑整个团队&#xff0c;造成心气一直不高&#xff0c;严重影响工作效率。对此我还是坚持去年的观点&#xff1a;坚持宽松、…

【系统架构设计】操作系统(一)

操作系统&#xff08;一&#xff09; 操作系统的类型和结构操作系统基本原理进程管理进程三态模型挂起状态进程互斥 / 进程同步前趋图进程调度死锁 存储管理设备管理文件管理作业管理 操作系统原理的关键在于“一个观点、两条线索”&#xff1a;一个观点是以资源管理的观点来定…

简谈设计模式之代理模式

代理模式是一种结构型设计模式, 主要用于为其他对象提供一种代理, 以控制对这个对象的访问. 代理模式可以在不修改目标对象的前提下, 通过代理对象在访问目标对象之前或之后增加额外的操作 代理模式结构 抽象主题: 定义了真实主题和代理的共同接口, 这样客户端就可以通过接口…

【算法笔记自学】第 9 章 提高篇(3)——数据结构专题(2)

9.1树与二叉树 #include <cstdio>int main() {int n, m;scanf("%d%d", &n, &m);printf(n m 1 ? "Yes" : "No");return 0; } 9.2二叉树的遍历 #include <cstdio> #include <vector> using namespace std;const int…

Java毕业设计 基于SSM vue电影订票系统小程序 微信小程序

Java毕业设计 基于SSM vue电影订票系统小程序 微信小程序 SSM 电影订票系统小程序 功能介绍 用户 登录 注册 忘记密码 首页 图片轮播 电影信息 电影详情 评论 收藏 预订 电影资讯 资讯详情 用户信息修改 电影评价 我的收藏管理 用户充值 在线客服 我的订单 管理员 登录 个人…

不遵守全局主键配置【PGSQL】

<selectKey keyProperty"id" resultType"java.lang.Long" order"BEFORE"> SELECT nextval(ft.id2_seq::regclass) </selectKey> 这段 XML 配置中的 <selectKey> 标签是 MyBatis 中用来生成主键的关键部分。让我解释一下每个…

SpringCloud集成kafka集群

目录 1.引入kafka依赖 2.在yml文件配置配置kafka连接 3.注入KafkaTemplate模版 4.创建kafka消息监听和消费端 5.搭建kafka集群 5.1 下载 kafka Apache KafkaApache Kafka: A Distributed Streaming Platform.https://kafka.apache.org/downloads.html 5.2 在config目录下做…

java导出word实现

参考&#xff1a;Poi-tl Documentation

NaiveUI与ElementUI 比较分析

前言 在前端开发的广阔领域中&#xff0c;Vue.js作为最流行的前端框架之一&#xff0c;为开发者提供了丰富的组件库&#xff0c;其中NaiveUI和ElementUI是两个备受瞩目的选择。本文将深入分析这两个组件库的特点、优劣势以及适用场景&#xff0c;帮助开发者在项目中做出更合适…

全渠道AI智能商品管理软件平台 助力零售品牌占领技术高地

关于7thonline第七在线 1999年创立于纽约&#xff0c;7thonline第七在线全渠道AI智能商品管理平台&#xff0c;以先进的数学算法模型、人工智能和机器学习技术为核心驱动力&#xff0c;融合了众多零售商品管理的卓越实践经验&#xff0c;精心打造出一套深度适配零售业务场景的自…

[每周一更]-(第105期):SSL证书过期后引发的DNS缓存问题

问题回顾&#xff1a; ​ 上班路上收到ZeroSSL邮件通知我们清点项目的SSL证书到期了&#xff0c;到公司还是登录网址查看信息&#xff0c;一看果然是7.10也就是今天到期&#xff0c;开始看下acme.sh的定制任务为何没生效&#xff0c;一看crontab脚本&#xff0c;日志任务丢垃圾…

tomcat和nginx实现动静分离

访问nginx就是静态页面&#xff0c;nginx代理index.jsp可以访问tomcat的动态页面。 实验 1、设备以及IP地址 nginx1 192.168.10.41 tomcat1 192.168.10.51 tomcat2 192.168.10.52 2、tomcat1 的配置 创建动态页面 cd /usr/local/tomcat/webapps 创建一个目录作为一个ser…

复现ORB3-YOLO8项目记录

文章目录 1.编译错误1.1 错误11.2 错误21.3 错误31.4 错误4 1.编译错误 首先ORB-SLAM相关项目已经写过很多篇博客了&#xff0c;从ORB-SLAM2怎么运行&#xff0c;再到现在的项目。关于环境已经不想多说了 1.1 错误1 – DEPENDENCY_LIBS : /home/lvslam/ORB3-YOLO8/Thirdparty…

2024年C#优秀实用的类库推荐

简介 在软件开发领域&#xff0c;随着技术的不断进步和项目的复杂化&#xff0c;使用高质量的类库来加速开发过程、减少错误并提高代码质量变得至关重要。C# 作为一款功能强大的编程语言&#xff0c;拥有众多优秀的类库供开发者选择。本文旨在为您推荐一些在2024年备受推崇的C…

Feature Alignment and Uniformity for Test Time Adaptation--论文笔记

论文笔记 资料 1.代码地址 https://github.com/SakurajimaMaiii/TSD 2.论文地址 https://arxiv.org/abs/2303.10902 3.数据集地址 论文摘要的翻译 TTA在接收训练分布外的测试域样本时对深度神经网络进行自适应。在这样设置下&#xff0c;模型只能访问在线未标记的测试样…

昇思MindSpore学习总结十五 ——基于Mindspore 实现BERT对话情绪识别

1、环境配置 根据实际情况&#xff0c;选择合适版本。 %%capture captured_output # 实验环境已经预装了mindspore2.2.14&#xff0c;如需更换mindspore版本&#xff0c;可更改下面mindspore的版本号 !pip uninstall mindspore -y !pip install -i https://pypi.mirrors.ustc…

MYSQL--第七次作业

MYSQL–第七次作业 在product表上创建三个触发器。每次激活触发器后&#xff0c;都会更新operate表。product表和表的内容如下 Product表内容 字段名 字段描述 数据类型 主键 外键 非空 唯一 自增 Id 产品编号 Int(10) 是 否 是 是 否 Name …

torch之从.datasets.CIFAR10解压出训练与测试图片 (附带网盘链接)

前言 从官网上下载的是长这个样子的 想看图片&#xff0c;咋办咧&#xff0c;看下面代码 import torch import torchvision import numpy as np import os import cv2 batch_size 50transform_predict torchvision.transforms.Compose([torchvision.transforms.ToTensor(),…

ubuntu 24.04 安装telnet服务

1.安装telnet客户端 $sudo apt-get install telnet 2.安装telnet服务器 $sudo apt-get instlal telnetd 3.安装网络守护进程服务程序来管理telnet服务 $sudo apt-get install xinetd 4.修改配置文件inetd.conf $sudo vi /etc/inetd.conf telnet stream tcp nowait telne…