ASP.NET Core集成 Hangfire
对于Hangfire你可以使用何类型的存储方式。最常用的一个方式是使用SQL Server 作为存储(请查询Hangfire.SqlServer)。在你安装完这些nuget包后,你可以配置你的项目来使用Hangfire。
首先,我们更改Startup类的 ConfigureServices 方法来添加Hangfire的依赖注入,并且配置存储方式以及连接字符串。
首先,我们更改Startup类的 ConfigureServices 方法来添加Hangfire的依赖注入,并且配置存储方式以及连接字符串。
然后我们可以在 Configure 方法中添加对UseHangfireServer的调用。
如果你想使用Hangfire的Dashboard,你也可这样做:
如果你想要授权认证dasboard,你可以像下面一样使用AbpHangfireAuthorizationFilter:
上面的配置是集成hangfire到ASP.NET Core应用的标准配置。
WebUI.Core\WebService\HangfireDispose.cs
using System; using System.ServiceModel; using Elight.Logic.Sys; using Elight.Utility.Logs; using Hangfire; namespace Elight.WebUI.Core.WebService { [ServiceContract(Namespace = "http://test.namespace")] public class HangfireDispose { #region 配置服务 public static void HangfireService() { LogLogic log = new LogLogic(); //Fire - And - forget(发布 / 订阅) //这是一个主要的后台任务类型,持久化消息队列会去处理这个任务。当你创建了一个发布 / 订阅任务,该任务会被保存到默认队列里面(默认队列是"Default",但是支持使用多队列)。多个专注的工作者(Worker)会监听这个队列,并且从中获取任务并且完成任务。 //BackgroundJob.Enqueue(() => Console.WriteLine("Fire-and-forget")); //BackgroundJob.Enqueue(() => log.WriteSimple(Level.Info, "BackgroundJob", "Enqueue成功", "BackgroundJob.Enqueue", "Fire-and-forget")); //延迟 //如果想要延迟某些任务的执行,可以是用以下任务。在给定延迟时间后,任务会被排入队列,并且和发布 / 订阅任务一样执行。 //BackgroundJob.Schedule(() => Console.WriteLine("Delayed"), TimeSpan.FromDays(1)); //BackgroundJob.Schedule(() => log.WriteSimple(Level.Info, "BackgroundJob", "Schedule成功", "BackgroundJob.Schedule", "如果想要延迟某些任务的执行"), TimeSpan.FromDays(1)); //循环 //按照周期性(小时,天等)来调用方法,请使用RecurringJob类。在复杂的场景,您可以使用CRON表达式指定计划时间来处理任务。 //RecurringJob.AddOrUpdate(() => Console.WriteLine("Daily Job"), Cron.Daily); RecurringJob.AddOrUpdate(() => log.WriteSimple(Level.Info, "RecurringJob", "seconds成功", "Hello, seconds!", "每15秒执行一次"), "*/15 * * * * *"); //连续 //连续性允许您通过将多个后台任务链接在一起来定义复杂的工作流。 //var id = BackgroundJob.Enqueue(() => Console.WriteLine("Hello, ")); //BackgroundJob.ContinueWith(id, () => Console.WriteLine("world!")); //var id = BackgroundJob.Enqueue(() => log.Write(Level.Info, "BackgroundJob", "BackgroundJob.ContinueWith成功", "Hello", "连续性允许您通过将多个后台任务")); //BackgroundJob.ContinueWith(id, () => log.Write(Level.Info, "BackgroundJob", "BackgroundJob.ContinueWith成功", "world!", "链接在一起来定义复杂的工作流")); //try //{ // _backgroundJobs.Enqueue<Services>(x => x.LongRunning(JobCancellationToken.Null)); // _recurringJobs.AddOrUpdate("seconds", () => Console.WriteLine("Hello, seconds!"), "*/15 * * * * *"); // _recurringJobs.AddOrUpdate("minutely", () => Console.WriteLine("Hello, world!"), Cron.Minutely); // _recurringJobs.AddOrUpdate("hourly", () => Console.WriteLine("Hello"), "25 15 * * *"); // _recurringJobs.AddOrUpdate("neverfires", () => Console.WriteLine("Can only be triggered"), "0 0 31 2 *"); // _recurringJobs.AddOrUpdate("Hawaiian", () => Console.WriteLine("Hawaiian"), "15 08 * * *", TimeZoneInfo.FindSystemTimeZoneById("Hawaiian Standard Time")); // _recurringJobs.AddOrUpdate("UTC", () => Console.WriteLine("UTC"), "15 18 * * *"); // _recurringJobs.AddOrUpdate("Russian", () => Console.WriteLine("Russian"), "15 21 * * *", TimeZoneInfo.Local); //} //catch (Exception e) //{ // _logger.LogError("An exception occurred while creating recurring jobs.", e); //} //这里呢就是需要触发的方法 "0/10 * * * * ? " 可以自行搜索cron表达式 代表循环的规律很简单 //CancelOrderJob代表你要触发的类 Execute代表你要触发的方法 } #endregion } }
HangfireService