需要引用的包
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)
{
/*该段代码仅包含Hangifre相关配置*/
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)
{
/*该段代码仅包含Hangifre相关配置*/
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表达式在线生成器:
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- azee.cn 版权所有 赣ICP备2024042794号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务