PiBox.Plugins.Jobs.Hangfire
1.0.3
See the version list below for details.
dotnet add package PiBox.Plugins.Jobs.Hangfire --version 1.0.3
NuGet\Install-Package PiBox.Plugins.Jobs.Hangfire -Version 1.0.3
<PackageReference Include="PiBox.Plugins.Jobs.Hangfire" Version="1.0.3" />
paket add PiBox.Plugins.Jobs.Hangfire --version 1.0.3
#r "nuget: PiBox.Plugins.Jobs.Hangfire, 1.0.3"
// Install PiBox.Plugins.Jobs.Hangfire as a Cake Addin #addin nuget:?package=PiBox.Plugins.Jobs.Hangfire&version=1.0.3 // Install PiBox.Plugins.Jobs.Hangfire as a Cake Tool #tool nuget:?package=PiBox.Plugins.Jobs.Hangfire&version=1.0.3
PiBox.Plugins.Jobs.Hangfire
PiBox.Plugins.Jobs.Hangfire is a plugin
that allows PiBox based services
to use the hangfire package to manage and schedule (cron) jobs
.
Installation
To install the nuget package follow these steps:
dotnet add package PiBox.Plugins.Jobs.Hangfire
or add as package reference to your .csproj
<PackageReference Include="PiBox.Plugins.Jobs.Hangfire" Version="" />
Appsettings.yml
Configure your appsettings.yml with these properties
For example
hangfire:
Host: localhost
Port: 5432
Database: postgres
User: postgres
Password: postgres
InMemory: true
DashboardUser: awesome-user #if you don't set this, you can't access the hangfire dashboard
DashboardPassword: awesome-pw #if you don't set this, you can't access the hangfire dashboard
HangfireConfiguration.cs
[Configuration("hangfire")]
public class HangfireConfiguration
{
public string? Host { get; set; }
public int Port { get; set; }
public string? Database { get; set; }
public string? User { get; set; }
public string? Password { get; set; }
public string? DashboardUser { get; set; }
public string? DashboardPassword { get; set; }
public bool InMemory { get; set; }
public int? PollingIntervalInMs { get; set; }
public int? WorkerCount { get; set; }
public string ConnectionString => $"Host={Host};Port={Port};Database={Database};Username={User};Password={Password};";
}
Configuration in your plugin host
public class SamplePluginHost : IPluginServiceConfiguration
{
public void ConfigureServices(IServiceCollection serviceCollection)
{
// here you can register your recurring jobs or just annotate them with the [RecurringJob] attribute
serviceCollection.ConfigureJobs((jobRegister, _) =>
{
jobRegister.RegisterParameterizedRecurringAsyncJob<HangfireParameterizedTestJob, int>(Cron.Daily(), 1); // every day at 0:00 UTC
jobRegister.RegisterRecurringAsyncJob<HangfireTestJob>(Cron.Hourly(15)); // every hour to minute 15 UTC
});
}
}
Usage
Please take a look at the official Hangfire documentation https://docs.hangfire.io/en/latest/ and best practises https://docs.hangfire.io/en/latest/best-practices.html
Every job does out of the box 10 retries (with increasing wait times) if not configured otherwise.
Auto registration of jobs
You can also define recurring jobs as simple classes and annotate them with the [ReccuringJob] attribute which then auto-registers the job for you at startup
[RecurringJob("0 0 * * *")]
public class HangfireTestJob : AsyncJob
{
public HangfireTestJob(ILogger<HangfireTestJob> logger) : base(logger)
{
}
protected override Task<object> ExecuteJobAsync(CancellationToken cancellationToken)
{
Logger.LogInformation("TEst");
return Task.FromResult<object>(cancellationToken);
}
}
Define jobs
Without parameters
public class HangfireTestJob : AsyncJob
{
public HangfireTestJob(ILogger<HangfireTestJob> logger) : base(logger)
{
}
protected override Task<object> ExecuteJobAsync(CancellationToken cancellationToken)
{
Logger.LogInformation("TEst");
return Task.FromResult<object>(cancellationToken);
}
}
With parameters
Job input parameters and results get serialized to json and are displayed in the hangfire dashboard, be aware of the possibility of leaking sensitive information!
public class MyResult
{
public int JobParameter {get;set;}
}
public class HangfireParameterizedTestJob : ParameterizedAsyncJob<int>
{
public HangfireParameterizedTestJob(ILogger<HangfireParameterizedTestJob> logger) : base(logger)
{
}
protected override Task<MyResult> ExecuteJobAsync(int value, CancellationToken cancellationToken)
{
var result = new MyResult(){ JobParameter = value};
Logger.LogInformation("Test job for {Value}", value);
return result; //
}
}
Fire and forget jobs or enqueue dynamically
You can create new jobs from anywhere in your service, see also https://docs.hangfire.io/en/latest/background-methods/index.html
BackgroundJob.Enqueue<IEmailSender>(x => x.Send("hangfire@example.com"));
BackgroundJob.Enqueue(() => Console.WriteLine("Hello, world!"));
Execution modes
If you want the job only to be executed as one instance at any given point in time use the
UniquePerQueueAttribute
this ensures that there is only one job of the same type/name in processing or queued at any given point!
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
-
net8.0
- AspNetCore.HealthChecks.Hangfire (>= 7.0.0)
- HangFire (>= 1.8.6)
- Hangfire.MemoryStorage (>= 1.8.0)
- Hangfire.PostgreSql (>= 1.20.4)
- Microsoft.AspNetCore.Authentication.OpenIdConnect (>= 8.0.0)
- Newtonsoft.Json (>= 13.0.3)
- PiBox.Hosting.Abstractions (>= 1.0.3)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
1.0.73 | 65 | 10/22/2024 |
1.0.66 | 140 | 10/15/2024 |
1.0.64 | 101 | 10/14/2024 |
1.0.61 | 103 | 10/1/2024 |
1.0.60 | 89 | 9/27/2024 |
1.0.54 | 219 | 4/30/2024 |
1.0.51 | 141 | 2/27/2024 |
1.0.49 | 96 | 2/27/2024 |
1.0.47 | 122 | 2/21/2024 |
1.0.45 | 127 | 2/20/2024 |
1.0.43 | 111 | 2/13/2024 |
1.0.41 | 111 | 2/13/2024 |
1.0.39 | 122 | 2/8/2024 |
1.0.38 | 108 | 2/8/2024 |
1.0.37 | 97 | 2/8/2024 |
1.0.35 | 101 | 2/2/2024 |
1.0.32 | 108 | 1/30/2024 |
1.0.25 | 171 | 12/27/2023 |
1.0.23 | 129 | 12/19/2023 |
1.0.22 | 101 | 12/19/2023 |
1.0.21 | 102 | 12/19/2023 |
1.0.19 | 125 | 12/11/2023 |
1.0.17 | 158 | 11/23/2023 |
1.0.7 | 110 | 11/23/2023 |
1.0.5 | 119 | 11/23/2023 |
1.0.3 | 128 | 11/23/2023 |
1.0.0 | 138 | 11/21/2023 |
0.9.9 | 128 | 11/21/2023 |
0.9.7 | 126 | 11/21/2023 |