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

浙公网安备 33010602011771号