ABP-Hangfire定时任务

前言:

什么是定时任务?顾名思义就是在固定一段时间,执行固定一段任务。如同闹钟每天定时叫你起床。

我们可以利用定时任务,让系统在固定时间执行一个方法。

那么我们在ABP框架怎么配置定时任务呢?

第一步:部署

我们需要安装三个包:

Hangfire.Core

Hangfire.SqlServer或(MySQL数据库,Hangfire.MySQL.Core)对应自己的数据库,但SQL会比较稳定

Hangfire.MemoryStorage.Core

然后在控制台运行:Install-Package Hangfire

然后其他用到定时服务的层安装:Hangfire.Core一个就可以了

配置

 

然后打开Host层(展示层)的Startup.cs类

在ConfigureServices 方法中注册服务

这里是配置数据库,数据库需要确保存在,这里配置的是SQL Server数据库:

 public void ConfigureServices(IServiceCollection services)
        {

          services.AddHangfire(r => r.UseSqlServerStorage("Data Source=***;Initial Catalog=表名;User ID=sa;Password=密码"));
        }

然后在Configure 方法中加入HangfireServer及HangfireDashboard:

 public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {


            app.UseHangfireServer();
            app.UseHangfireDashboard(); //打开仪表盘
......略
            }

上面2步,我们就打开了我们的定时任务服务,和打开了仪表盘,如果不行使用仪表盘业务可以不添加。

看看仪表盘效果吧:在网址后面输入/hangfire就可以打开我们的仪表盘了。可以操作我们的定时任务

第二步:使用

一:每次程序运行的时候执行:

 BackgroundJob.Enqueue(() => Console.WriteLine("我只执行一次!!!!"));

二:延迟任务执行

例如,在注册后的一天向新注册的用户发送电子邮件。

 

BackgroundJob.Schedule(() => Console.WriteLine($"我是1分钟后执行一次"), TimeSpan.FromMinutes(1));

好呀很多延迟,一个小时的,延迟一天的等等。。。。很多

 

三.定时执行

RecurringJob.AddOrUpdate("2", () => Console.Write("我每隔2分钟执行一次"), Cron Cron.MinuteInterval(2));

当然还有按年的,按月..很多,具体看看Cron这个类就知道了 

四. 延续性任务

延续性任务类似于.NET中的Task,可以在第一个任务执行完之后紧接着再次执行另外的任务:

如,我等待,名为“2”的定时任务完成在执行

BackgroundJob.ContinueWith("2", () => Console.Write("我是延续性任务"));

测试看看效果:

 我们把,这些任务写进Test接口中,我一旦调用Test接口这些任务就会创建。

不用担心重复创建的问题因为他们同名的任务只会创建一次

        public string Test()
        {
            BackgroundJob.Enqueue(() => Console.WriteLine("我只执行一次!!!!"));
            BackgroundJob.Schedule(() => Console.WriteLine($"我是1分钟后执行一次"), TimeSpan.FromMinutes(1));
            RecurringJob.AddOrUpdate("2", () => Console.Write("我每隔2分钟执行一次"),  Cron.MinuteInterval(2));
            BackgroundJob.ContinueWith("2", () => Console.Write("我是延续性任务"));
            return "Heelo World";
        }

调用Test接口测试一下

参考:

https://blog.csdn.net/WuLex/article/details/78454519

https://blog.csdn.net/anyusheng/article/details/78672965

猜你喜欢

转载自blog.csdn.net/wangwengrui40/article/details/86631299
今日推荐