Useful extension methods to be able to use Hangfire to create background jobs.
If you like this project, learn something or you are using it in your applications, please give it a star. Thanks!
Install the package via NuGet first:
Install-Package Mehedi.Hangfire.Extensions
Or via the .NET Core command line interface:
dotnet add package Mehedi.Hangfire.Extensions
Either commands, from Package Manager Console or .NET Core CLI, will download and install package and all required dependencies.
Create ASP.NET Core API project. Then install the following dependencies with the following commands.
dotnet add package Hangfire.AspNetCore
dotnet add package Mehedi.Hangfire.Extensions
To store messages we'll need databases. For an example if we want to store messages (http requests etc.) inside postgres, add the following package.
dotnet add package Hangfire.PostgreSql
Update appsettings.json
with postgres connection string.
"ConnectionStrings": {
"HangfireConnection": "Host=localhost;Port=5432;Database=hangfire;Username=postgres;Password=postgres;"
},
Inside Program.cs
file write the following code snippets.
builder.Services.AddHangfire(config =>
{
config.UsePostgreSqlStorage(c => c.UseNpgsqlConnection(builder.Configuration.GetConnectionString("HangfireConnection")));
config.UseMediatR(); // Custom extension built on
});
builder.Services.AddHangfireServer();
and
app.UseHangfireDashboard();
Add PlaceOrder class as the following code snippet
public class PlaceOrder : IRequest
{
public Guid OrderId { get; set; }
}
Inside Controller simply enque requests like the following code snippets as an example.
[HttpPost("/sales/orders/{orderId:Guid}")]
public IActionResult Action([FromRoute] Guid orderId)
{
_mediator.Enqueue("Place Order", new PlaceOrder
{
OrderId = orderId
});
return Ok($"Job created");
}
If you face any more complexity, then just follow the example project to getting started. Example
- net8.0
- Hangfire.Core (>= 1.8.12)
- MediatR (>= 12.2.0)