ASP.NET Core Web API Hangfire

ASP.NET Core Web API Hangfire


前言

👨‍💻👨‍🌾📝记录学习成果,以便温故而知新

Hangfire是一种定任务调度器

本文使用MySQL服务器

本文也参考了其他人文章的一些思路。


一、安装

NuGet安装

Hangfire.AspNetCore

Hangfire.MySqlStorage

由于选择的MySQL数据库,所以安装Hangfire.MySqlStorage。

二、相关代码

Program.cs中添加代码:

1.代码片段

csharp 复制代码
builder.Services.AddHangfire(config =>
{
    config.SetDataCompatibilityLevel(CompatibilityLevel.Version_180)
          .UseSimpleAssemblyNameTypeSerializer()
          .UseRecommendedSerializerSettings();

    config.UseStorage(
              new MySqlStorage(
                  @"server=127.0.0.1;user=root;password=root;database=hangfiredb;allowuservariables=True;",
                  //必须允许用户自定义参数,不然面板不能使用
                  new MySqlStorageOptions { TablesPrefix = "Hangfire" })).UseHangfireHttpJob();
});

builder.Services.AddHangfireServer();
builder.Services.AddTransient<IBackgroundJobClient, BackgroundJobClient>();

MySQL数据连接:

@"server=127.0.0.1;user=root;password=root;database=hangfiredb;allowuservariables=True;"

如下:

.UseHangfireHttpJob()

实现的效果是可以在控制台添加任务调度。

前提是需要安装:

Hangfire.HttpJob

如下代码:

new MySqlStorageOptions { TablesPrefix = "Hangfire" }

是制定数据库中生成的表是以Hangfire开头,如下图:

在测试的时候没有处理好一个小细节,如果代码写成:

csharp 复制代码
new MySqlStorageOptions { TablesPrefix = "Hangfire_" }

将会更好!!!

2.代码片段

csharp 复制代码
app.UseHangfireDashboard();

3.运行效果

http://localhost:5279/hangfire/

三、测试代码

在项目新增控制器HangfireController及一个方法:

csharp 复制代码
[HttpGet("Execute")]
public void Execute(string job)
{
    Debug.WriteLine(job);
}

在控制台=>作业=>完成 中查看执行效果。

1.即发即弃作业

csharp 复制代码
[HttpGet("test1")]
public string Test1()
{
    string job = "即发即弃作业";
    BackgroundJob.Enqueue(() => Execute(job));
    return job;
}

测试效果:

2.延迟作业

csharp 复制代码
[HttpGet("test2")]
public string Test2()
{
    string job = "延迟作业";
    BackgroundJob.Schedule(() => Execute(job), TimeSpan.FromMinutes(1));
    return job;
}

测试效果:

3.重复作业

csharp 复制代码
[HttpGet("test3")]
public string Test3()
{
    string job = "重复作业";
    RecurringJob.AddOrUpdate(job, () => Execute(job), "0 * * * * ?", new RecurringJobOptions()
    {
        MisfireHandling = MisfireHandlingMode.Ignorable,
        TimeZone = TimeZoneInfo.Local,
    });
    return job;
}

4.延续作业

csharp 复制代码
[HttpGet("test4")]
public string Test4()
{
    var jobId = BackgroundJob.Enqueue(() => Execute("延续作业1"));
    BackgroundJob.ContinueJobWith(jobId, () => Execute("延续作业2"));
    return "延续作业";
}

测试效果:

5.页面调度作业

csharp 复制代码
[HttpGet("test5")]
public string Test5()
{
    Debug.WriteLine("页面调度作业:" + DateTime.Now.ToString());
    return "页面调度作业:" + DateTime.Now.ToString();
}


测试效果:

页面调度作业感觉像xxl-job,但是操作的便捷性上个人感觉略差一点意思。

相关推荐
程序员爱钓鱼1 小时前
Go语言实战案例 — 工具开发篇:实现一个图片批量压缩工具
后端·google·go
ChinaRainbowSea3 小时前
7. LangChain4j + 记忆缓存详细说明
java·数据库·redis·后端·缓存·langchain·ai编程
舒一笑3 小时前
同步框架与底层消费机制解决方案梳理
后端·程序员
minh_coo3 小时前
Spring框架事件驱动架构核心注解之@EventListener
java·后端·spring·架构·intellij-idea
白初&5 小时前
SpringBoot后端基础案例
java·spring boot·后端
计算机学姐7 小时前
基于Python的旅游数据分析可视化系统【2026最新】
vue.js·后端·python·数据分析·django·flask·旅游
该用户已不存在8 小时前
你没有听说过的7个Windows开发必备工具
前端·windows·后端
David爱编程8 小时前
深入 Java synchronized 底层:字节码解析与 MonitorEnter 原理全揭秘
java·后端
KimLiu8 小时前
LCODER之Python:使用Django搭建服务端
后端·python·django
再学一点就睡8 小时前
双 Token 认证机制:从原理到实践的完整实现
前端·javascript·后端