ABP+Hangfire实现定时任务

文章目录

依赖库

集成

添加DependOn

csharp 复制代码
[DependsOn(typeof(AbpBackgroundWorkersHangfireModule))]
public class AppModule: AbpModule
{
}

创建ConfigureHangfire

csharp 复制代码
private void ConfigureHangfire(IServiceCollection services,IConfiguration configuration)
{
    services.AddHangfire(config =>
    {
        config.UseSqlServerStorage(configuration.GetConnectionString("Default"));
    });
    services.AddHangfireServer(o =>
    {
    	//hangfire默认15s扫一次任务,加快到1s一次。毫秒级建议用while或者重开一个abp
    	o.SchedulePollingInterval = TimeSpan.FromSeconds(1);
	});
csharp 复制代码
public override void ConfigureServices(ServiceConfigurationContext context)
{
    var services = context.Services;
    var config = context.Configuration;
    ConfigureHangfire(services,config);
}

添加dashboard

csharp 复制代码
app.UseHangfireDashboard();
app.UseConfiguredEndpoints();

此时打开http://localhost:5000/hangfire就能看到dashboard了。

创建定时任务

HighFrequencyWorker

csharp 复制代码
public class HighFrequencyWorker : AsyncPeriodicBackgroundWorkerBase
{
    public HighFrequencyWorker(AbpAsyncTimer timer, IServiceScopeFactory serviceScopeFactory) : base(timer, serviceScopeFactory)
    {
        Timer.Period = 1000;
    }

    protected override async Task DoWorkAsync(PeriodicBackgroundWorkerContext workerContext)
    {
        Logger.LogDebug("我是高频");
    }
}

CronWorker

csharp 复制代码
public class CronWorker : HangfireBackgroundWorkerBase
{
    public CronWorker()
    {
        RecurringJobId = "Cron Worker";
        CronExpression = "0 0/1 * * * ?";
    }

    public override async Task DoWorkAsync(CancellationToken cancellationToken = default)
    {
        Logger.LogDebug($"我是Cron,当前时间{DateTime.Now.ToLongTimeString()}");
    }
}

在OnApplicationInitialization里注册

csharp 复制代码
context.AddBackgroundWorkerAsync<HighFrequencyWorker>().Wait();
context.AddBackgroundWorkerAsync<CronWorker>().Wait();
相关推荐
huaqianzkh17 分钟前
DevExpress TreeList 右键菜单踩坑复盘:空白区域正常、节点右键弹出控件自带菜单解决方案
c#
俭朴的奇异果31 分钟前
MongoDB实战开发 【零基础学习,附完整Asp.net示例】
学习·mongodb·asp.net
布朗克16837 分钟前
Go 入门到精通-09-复合类型之Map
开发语言·后端·golang·map
程序员爱钓鱼1 小时前
Rust 开发环境安装(Windows|macOS|Linux)
后端·rust
爱勇宝9 小时前
第 1 章:别把“需求文档”当成真正的需求
前端·后端·程序员
贪玩的蛋挞11 小时前
C#与闭包
开发语言·c#
IT_陈寒14 小时前
闭包陷阱让我加了两天班,JavaScript你真行
前端·人工智能·后端
易协同低代码15 小时前
通达OA核心类库TD类深度解析
后端
Gopher_HBo15 小时前
Go语言学习笔记(十八)Gin处理Session
后端
谭光志16 小时前
工具塞满上下文窗口怎么办?深度拆解 AI Agent Tool Search 按需加载实现原理
前端·后端·ai编程