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();
相关推荐
慧都小妮子13 分钟前
C# 实现AI合同审查:从读取、风险标注到批量签发
ai·自然语言处理·c#·.net·办公自动化·ai合同审查·文档ai代理
智驭未来掌门人27 分钟前
利用FFmpeg快速实现一个RTSP推流服务器
后端
垚垚学技术_聚焦云原生39 分钟前
K8s Pod 完整生命周期详解
后端
JavaGuide43 分钟前
Github 史诗级故障,与此同时,Cursor 版「GitHub」正式上线!
前端·后端
不一样的少年_1 小时前
修了 Bug、做了重构,为什么老板还是觉得你没产出?
前端·后端·程序员
水深火乐1 小时前
安全地生成验证码、密码和 Token
后端
小强19881 小时前
SQL Server 慢查询怎么定位?一套从“卡”到“快”的完整排查流程
后端
水深火乐1 小时前
interface和any
后端
步行cgn1 小时前
MyBatis Error evaluating expression ‘ids‘. Return value (3) was not iterable 错误详
java·后端
神奇小汤圆1 小时前
Spring Boot + LangChain4j实现RAG——从零搭建企业级知识库问答系统
后端