hangfire 實現已完成的job設置過期,防止數據無限增長

背景

後臺作業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、對於有效期的時長,就要看自己的業務需要了。

本文分享自微信公衆號 - 一線碼農聊技術(dotnetfly)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章