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();
相关推荐
野犬寒鸦1 天前
从零起步学习并发编程 || 第六章:ReentrantLock与synchronized 的辨析及运用
java·服务器·数据库·后端·学习·算法
逍遥德1 天前
如何学编程之01.理论篇.如何通过阅读代码来提高自己的编程能力?
前端·后端·程序人生·重构·软件构建·代码规范
程序员敲代码吗1 天前
如何通过命令行启动COMSOL的参数化、批处理和集群扫描
java·c#·bash
MX_93591 天前
Spring的bean工厂后处理器和Bean后处理器
java·后端·spring
程序员泠零澪回家种桔子1 天前
Spring AI框架全方位详解
java·人工智能·后端·spring·ai·架构
源代码•宸1 天前
大厂技术岗面试之谈薪资
经验分享·后端·面试·职场和发展·golang·大厂·职级水平的薪资
缺点内向1 天前
C#: 告别繁琐!轻松移除Word文档中的文本与图片水印
c#·自动化·word·.net
晚霞的不甘1 天前
CANN 编译器深度解析:UB、L1 与 Global Memory 的协同调度机制
java·后端·spring·架构·音视频
喵叔哟1 天前
06-ASPNETCore-WebAPI开发
服务器·后端·c#
2501_930707781 天前
使用 C# .NET 从 PowerPoint 演示文稿中提取背景图片
c#·powerpoint·.net