Hangfire Custom State Expiration
I would go for a custom implementation IBackgroundProcess
taking example from DelayedJobScheduler
which picks up delayed jobs on a regular basis to enqueue it.
In this custom implementation I would use a JobStorageConnection.GetAllItemsFromSet("blocked")
to get all the blocked job ids (where the DelayedJobScheduler
uses JobStorageConnection.GetFirstByLowestScoreFromSet
)
Then I would get each blocked job data with JobStorageConnection.GetJobData(jobId)
. For each of them, depending on its CreatedAt
field, I would do nothing if the job is not expired, or change its state to another state (Failed
?) if it is expired.
The custom job process can be declared like this :
app.UseHangfireServer(storage, options,
new IBackgroundProcess[] {
new MyCustomJobProcess(
myTimeSpanForExpiration,
(IBackgroundJobStateChanger) new BackgroundJobStateChanger(filterProvider)) });
A difficulty here is to obtain an IBackgroundJobStateChanger
as the server does not seem to expose its own.
If you use a custom FilterProvider
as option for your server pass its value as filterProvider
, else use (IJobFilterProvider) JobFilterProviders.Providers