背景
后臺作業hangfire用來在后臺里執行應用里的一些任務,后臺作業是持久性的這意味著即使你的應用程式崩潰了, 后臺作業也會在稍后重試并執行,平常我們一般是將資料持久化到存盤介質,比如redis,這時候就會帶來一個問題,如何防止資料無限擴大,我們可以已完成的job設定過期,防止資料無限增長,
解決方法
1、定義SucceededStateExpireHandler ,繼承IStateHandler,
using Hangfire.States; using Hangfire.Storage; using System; namespace CompanyName.ProjectName.Hangfire.Job.Code { /// <summary> /// 已完成的job設定過期,防止資料無限增長 /// </summary> public class SucceededStateExpireHandler : IStateHandler { public TimeSpan JobExpirationTimeout; public SucceededStateExpireHandler(int jobExpirationTimeout) { JobExpirationTimeout = TimeSpan.FromMinutes(jobExpirationTimeout); } public string StateName => SucceededState.StateName; public void Apply(ApplyStateContext context, IWriteOnlyTransaction transaction) { context.JobExpirationTimeout = JobExpirationTimeout; } public void Unapply(ApplyStateContext context, IWriteOnlyTransaction transaction) { } } }
2、設定過期時間,
JobExpirationTimeout = TimeSpan.FromMinutes(jobExpirationTimeout);
3、在ConfigureServices進行添加啟用,
public IServiceProvider ConfigureServices(IServiceCollection services) { .......................... GlobalStateHandlers.Handlers.Add(new SucceededStateExpireHandler(int.Parse(Configuration["Hangfire:JobExpirationTimeout"]))); }
總結
1、做資料的過期設定還是很有必要的,尤其是大資料量的情況下,可以有效的節約資源,提高速度,
2、對于有效期的時長,就要看自己的業務需要了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/257620.html
標籤:.NET Core
