需要引用的包
1.Hangfire.AspNetCore(1.7.25)
2.Hangfire.Redis.StackExchange(1.8.5) 安装这个包是为了给hangfire做持久化使用也有其他选择比如:sqlserver等...
3.Hangfire.Dashboard.BasicAuthorization(1.0.2)面板权限认证无需验证不引用
下面我们先贴配置代码:Startup.cs
using Hangfire; using Hangfire.Redis; public Startup(IConfiguration configuration) { _configuration = configuration; } public IConfiguration _configuration { get; } public void ConfigureServices(IServiceCollection services) { services.AddHangfire( configuration => configuration .SetDataCompatibilityLevel(CompatibilityLevel.Version_170) .UseSimpleAssemblyNameTypeSerializer() .UseRecommendedSerializerSettings() .UseRedisStorage("127.0.0.1:6379") ); services.AddHangfireServer(); }
如果需要使用Hangfire控制面板还需要以下配置
using Hangfire.Dashboard.BasicAuthorization; public void Configure(IApplicationBuilder app) { app.UseHangfireDashboard("/hangfire", new DashboardOptions()// /hangfire 参数是访问面板的路由名称 例如:http:xxx.xxx.com/hangfire { Authorization = new[] { new BasicAuthAuthorizationFilter(new BasicAuthAuthorizationFilterOptions { SslRedirect = false,//是否将所有非SSL请求重定向到SSL URL RequireSsl = false,//需要SSL连接才能访问HangFire Dahsboard。强烈建议在使用基本身份验证时使用SSL LoginCaseSensitive = true,//登录检查是否区分大小写 Users = new[] { new BasicAuthAuthorizationUser { Login ="xxxx",//用户名 PasswordClear = "xxxx"//密码 } } }) } }); //上面是需要使用身份验证的配置方式,如果不需要使用身份验证的方式则按照以下配置即可 app.UseHangfireDashboard("/hangfire"); }
使用面板可以很方便的管理循环定时执行的任务,以及查看任务的执行情况和错误日志
配置完成之后我们来说一下hangfire的基础调用方式
1.基于队列的任务处理(Fire-and-forget jobs)
我们使用 BackgroundJob 类的静态方法 Enqueue 来进行调用
var JobId = BackgroundJob.Enqueue( () => Console.WriteLine("Enqueue") );
这种调用方式可以说是在Hangfire中比较常见的,如果在没有异常的情况下只会执行一次,如果发生异常 Hangfire 会提供重试机制,在控制面板中可以查看 Hangfire 重试执行记录以及错误信息等。
2.延迟任务执行(Delayed jobs)
var JobId = BackgroundJob.Schedule( () => Console.WriteLine("Schedule"),TimeSpan.FromSeconds(10) );
延迟执行调用可以通过参数二来指定多久后执行,例如以上是 10 秒后调用控制台输出,若出现异常与上面机制相同
3.定时任务执行(Recurring jobs)
定时循环任务执行
//参数说明 参数一:执行的方法 参数二:Cron表达式 参数三:设置时区 RecurringJob.AddOrUpdate( () => ClearServices.ClearSystemLog(), Cron.Daily(0, 0), TimeZoneInfo.Local )
上面的例子是每天0点执行一次
可以使用 Hangfire Cron类下提供的基础Cron表达式 例如每月、天、小时
如果想要更灵活的定义需要自己生成Cron表达式
Cron表达式参考:【转】cron表达式详解 - 我只吃大碗 - 博客园 (cnblogs.com)
Cron表达式在线生成器:在线Cron表达式生成器 (qqe2.com)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)