Release Notes
Hangfire.Core
- Added – Introduce the
Job.Queue
property, so jobs now can have their own queue specified. - Added – Method overloads to create background jobs directly with a custom default queue.
- Added – Method overloads to create recurring jobs directly with a custom default queue.
- Added –
IBackgroundJobClient.Create
method overloads with the newqueue
parameter. - Added –
JobContinuationOptions.OnlyOnDeletedState
to create continuations after a failure. - Added – Make it possible to specify multiple
JobContinuationOptions
values for a continuation. - Added – Ability to use custom formattable resource identifiers for the
DisableConcurrentExecution
filter. - Added – Pass
ServerId
toFailedState
instances to simplify the debugging on different servers. - Added – Allow to pass job parameters when creating a job (by @brian-knoll-micronetonline).
- Added –
MisfireHandlingMode.Strict
to create job for each missed recurring job occurrence. - Added –
DeletedState
now have the persistedException
property populated after a failure. - Added –
Exception
job parameter is passed to continuation whenUseResultsInContinuations
method is used. - Added –
FromExceptionAttribute
to deal with an antecedent exception in a background job continuation. - Added – Allow to filter exception types in
AutomaticRetryAttribute
by using the newOnlyOn
property. - Added – Built-in
Remove
method forJobFilterCollection
to remove global filters based on their type. - Added –
IGlobalConfiguration.UseFilterProvider
extension method to unify the configuration. - Changed – Use the
AttemptsExceededAction.Delete
option by default in the global automatic retry filter. - Changed – Query time from storage in recurring and delayed schedulers when supported by storage.
- Changed – Increase the default value for the
BackgroundJobServerOptions.StopTimeout
to 500 ms. - Changed – Speedup delayed jobs when custom default queue is specified by avoiding extra state transition.
- Changed – Move job to the
DeletedState
instead ofSucceededState
when its invocation was canceled by a filter. - Deprecated –
AddOrUpdate
overloads with optional params defined in theRecurringJobManagerExtensions
class. - Deprecated –
AddOrUpdate
overloads with optional parameters defined in theRecurringJob
class. - Deprecated –
AddOrUpdate
method overloads with norecurringJobId
parameter. - Deprecated –
RecurringJobOptions.QueueName
property, new methods should be used instead. - Breaking – Dropped
NET45
platform target in favor ofNET451
target to support Visual Studio 2022.
Dashboard UI
- Added – Dark mode support for Dashboard UI configurable with the
UseDarkModeSupportForDashboard
method (by @danillewin). - Added – Dashboard UI now have full-width layout to display more data (by @danillewin).
- Added – Allow to add custom JavaScript and CSS files to the Dashboard UI via the
DashboardRoutes
class. - Added –
IGlobalConfiguration.UseJobDetailsRenderer
method for custom renderers for Job Details page. - Added – Display deleted jobs in the Realtime and History graphs when supported by storage.
- Added –
IGlobalConfiguration.UseDashboardMetrics
extension method to pass multiple metrics at once. - Added – State renderer for the
DeletedState
to display its new exception property. - Changed – Make it possible to display methods of non-loaded jobs in Dashboard UI when supported by storage.
- Changed – Improved display of real-time chart with more accents on failed and deleted jobs.
- Changed – Don't display queue name in state transition list when it's the
default
one. - Changed – Display scheduled job count when enqueued count is zero on the main metric.
Extensibility
- Added –
Factory
,StateMachine
andPerformer
properties to context classes to avoid injecting services. - Added – Allow to pass custom data to
ApplyStateContext
andElectStateContext
instances. - Added – Preserve custom data dictionary between the entire filter chain.
- Added – Allow to pass transaction to background job state changer when new methods implemented.
- Changed – Ignore some members when serializing a
JobFilterAttribute
instance to decrease payload size.
Storage
- Added – Virtual
JobStorage.GetReadOnlyConnection
method intended to returnJobStorageConnection
for replicas. - Added – Virtual
JobStorage.HasFeature
method for querying optional features. - Added – Optional
GetSetCount
andGetUtcDateTime
methods for theJobStorageConnection
class. - Added – Optional
AcquireDistributedLock
andRemoveFromQueue
methods for theJobStorageTransaction
class. - Added – Support for transactional acknowledge using new storage method for better handling some data loss scenarios.
- Added –
CreateJob
method to theJobStorageTransaction
abstract class. - Added –
SetJobParameter
method to theJobStorageTransaction
abstract class. - Added – Experimental
JobStorageConnection.SetContains
method. - Added – Optional
ParametersSnapshot
property forBackgroundJob
andJobData
classes to minimize roundtrips in future. - Added – Fetch "Retries" metric with other statistics when supported by storage.
- Added –
JobStorageMonitor
class with more available methods for the new features. - Changed – Allow to query job parameters without additional roundtrip when supported by a storage.
- Changed – Expose state data dictionaries in list DTOs when supported by storage.
Internals
- Added –
IBackgroundProcess.UseBackgroundPool
now allows to pass thread configuration logic. - Added –
BackgroundJobServerOptions.WorkerThreadConfigurationAction
option for custom thread configuration. - Changed – Allow changing queues on the fly with custom worker configuration.
- Changed – Avoid storage roundtrip to query job data in worker, take data from previous state change.
- Changed –
FromParameterAttribute
-based logic now always overwrites arguments, even with non-null values. - Changed – Turn
JobContinuationOptions
enum into flags while still possible. - Changed – Re-implement
TaskExtensions.WaitOneAsync
only with theRegisterWaitForSingleObject
method. - Changed –
ServerHeartbeatProcess
now usesThreadPriority.AboveNormal
to prioritize heartbeats.
Hangfire.SqlServer
- Added – Recommended Schema 8 migration with fixed
JobQueue.Id
column to use thebigint
type. - Added – Automatic client package detection based on available types, preferring
System.Data.SqlClient
(by @0xced). - Added –
SqlServerStorageOptions.DbProviderFactory
option to use custom provider factory. - Added –
TryAutoDetectSchemaDependentOptions
option to automatically enable options based on schema. - Added –
SqlServerStorage.SchemaVersion
metric for Dashboard UI. - Added – Optional experimental transactional acknowledge for SQL Server (
UseTransactionalAcknowledge
option). - Added – Implement the
Connection.GetUtcDateTime
feature to make work new changes in schedulers. - Changed – Remove dependency on System.Data.SqlClient for Hangfire.SqlServer (by @0xced).
- Changed – Set default value for the
QueuePollInterval
option toTimeSpan.Zero
. - Changed – Polling delay when
QueuePollInterval
is set to zero now defaults to 200 ms. - Changed – Sliding invisibility timeout-based fetching method is now used by default with 5 minute timeout.
- Changed – Use command batching by default with 5-minute maximum timeout.
- Changed – Enable
UseRecommendedIsolationLevel
option by default. - Changed –
GetJobData
now populatesJobData.ParametersSnapshot
property to avoid additional round-trips. - Changed – Display scheduled and processing jobs in the ascending order in Dashboard UI.
- Deprecated –
UsePageLocksOnDequeue
option is now obsolete and doesn't affect anything. - Breaking – Dropped
NET45
platform target in favor ofNET451
target to support Visual Studio 2022.
Hangfire.SqlServer.Msmq
- Breaking – Dropped
NET45
platform target in favor ofNET451
target to support Visual Studio 2022.
Hangfire.NetCore and Hangfire.AspNetCore
- Added –
IApplicationBuilder.UseHangfireServer
that accepts custom factory forIBackgroundProcessingServer
.