当前位置: 首页 > article >正文

ASP.NET Core Web API Hangfire

ASP.NET Core Web API Hangfire

  • 前言
  • 一、安装
  • 二、相关代码
    • 1.代码片段
    • 2.代码片段
    • 3.运行效果
  • 三、测试代码
    • 1.即发即弃作业
    • 2.延迟作业
    • 3.重复作业
    • 4.延续作业
    • 5.页面调度作业


前言

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

Hangfire是一种定任务调度器
本文使用MySQL服务器
本文也参考了其他人文章的一些思路。


一、安装

NuGet安装

Hangfire.AspNetCore
Hangfire.MySqlStorage

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

二、相关代码

Program.cs中添加代码:

1.代码片段

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开头,如下图:
在这里插入图片描述
在测试的时候没有处理好一个小细节,如果代码写成:

new MySqlStorageOptions { TablesPrefix = "Hangfire_" }

将会更好!!!

2.代码片段

app.UseHangfireDashboard();

3.运行效果

http://localhost:5279/hangfire/
在这里插入图片描述

三、测试代码

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

[HttpGet("Execute")]
public void Execute(string job)
{
    Debug.WriteLine(job);
}

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

1.即发即弃作业

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

测试效果:
在这里插入图片描述

2.延迟作业

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

测试效果:
在这里插入图片描述

3.重复作业

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

在这里插入图片描述

4.延续作业

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

测试效果:
在这里插入图片描述
在这里插入图片描述

5.页面调度作业

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

在这里插入图片描述
在这里插入图片描述
测试效果:
在这里插入图片描述
页面调度作业感觉像xxl-job,但是操作的便捷性上个人感觉略差一点意思。


http://www.kler.cn/a/458435.html

相关文章:

  • HTML5 标签输入框(Tag Input)详解
  • 静默模式下安装Weblogic 14.1.1.0.0
  • 数据挖掘——决策树分类
  • Spring实现Logback日志模板设置动态参数
  • 论文分享 | PromptFuzz:用于模糊测试驱动程序生成的提示模糊测试
  • 【分布式数据库与数据存储方案】详解
  • C# OpenCV机器视觉:漫水填充
  • 春招快速准备和是否考研建议
  • 深度学习实战102-基于深度学习的网络入侵检测系统,利用各种AI模型和pytorch框架实现网络入侵检测
  • STM32高级 以太网通讯案例1:网络搭建(register代码)
  • leetcode 面试经典 150 题:删除有序数组中的重复项
  • 基于SSM的“一汽租车辆共享平台”的设计与实现(源码+数据库+文档+PPT)
  • vue-复制剪贴板
  • pytorch整体环境打包安装到另一台电脑上
  • 高级技巧-使用Mysql 实现根据条件过滤整个分组数据
  • 正则化强度的倒数C——让模型学习更准确
  • Bash 脚本教程
  • 【Python】什么是元组(Tuple)?
  • TCP/IP原理
  • OpenCV-Python实战(4)——图像处理基础知识
  • 数据资产运营平台如何搭建?数据要素资产运营平台解决方案 解读
  • C++软件设计模式之代理(Proxy)模式
  • pikachu靶场搭建详细步骤
  • 爬虫入门一 基础知识 以及request
  • 【HF设计模式】04-工厂模式
  • 【论文笔记】Top-nσ: Not All Logits Are You Need