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();
相关推荐
行百里er1 天前
WebSocket 在 Spring Boot 中的实战解析:实时通信的技术利器
spring boot·后端·websocket
柳杉1 天前
建议收藏 | 2026年AI工具封神榜:从Sora到混元3D,生产力彻底爆发
前端·人工智能·后端
我是唐青枫1 天前
C#.NET ConcurrentDictionary<TKey, TValue> 深度解析:原理与实践
c#·.net
仙俊红1 天前
spring的IoC(控制反转)面试题
java·后端·spring
小楼v1 天前
说说常见的限流算法及如何使用Redisson实现多机限流
java·后端·redisson·限流算法
与遨游于天地1 天前
NIO的三个组件解决三个问题
java·后端·nio
czlczl200209251 天前
Guava Cache 原理与实战
java·后端·spring
Yuer20251 天前
什么是 Rust 语境下的“量化算子”——一个工程对象的最小定义
开发语言·后端·rust·edca os·可控ai
短剑重铸之日1 天前
《7天学会Redis》Day 5 - Redis Cluster集群架构
数据库·redis·后端·缓存·架构·cluster
计算机程序设计小李同学1 天前
基于SSM框架的动画制作及分享网站设计
java·前端·后端·学习·ssm