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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM