Hintergrundjobs¶
Jobs laufen auf Hangfire mit dem Speicher des Datenbank-Providers: Postgres, SQL Server oder bei SQLite im Arbeitsspeicher. Ein Job läuft als der Benutzer, der ihn eingereiht hat; Berechtigungen, Mandantenfilter und Audit funktionieren wie in einem Request.
public sealed record RenderPreview(Guid AssetId);
internal sealed class RenderPreviewJob(IDispatcher dispatcher) : IBackgroundJob<RenderPreview>
{
public Task ExecuteAsync(RenderPreview args, CancellationToken cancellationToken) =>
dispatcher.SendAsync(new CreatePreviewCommand(args.AssetId), cancellationToken);
}
jobs.Enqueue<RenderPreviewJob, RenderPreview>(new RenderPreview(asset.Id), queue: "processing");
jobs.Schedule<RenderPreviewJob, RenderPreview>(new RenderPreview(asset.Id), TimeSpan.FromMinutes(5));
Wiederkehrende Jobs laufen ohne Benutzer und Mandant:
internal sealed class CleanupJob : IRecurringJob
{
public Task ExecuteAsync(CancellationToken cancellationToken) => Task.CompletedTask;
}
services.AddRecurringJob<CleanupJob>("cleanup", "0 3 * * *");
Coworkee:Jobs |
|
|---|---|
RunServer |
Jobs in diesem Host verarbeiten (der AppHost schaltet das für den Auth-Server ab) |
Queues |
Warteschlangen dieses Hosts, Standard default, mail |
WorkerCount |
parallele Worker (5) |
Attempts, RetryDelaysInSeconds |
Wiederholungen |
Das Hangfire-Dashboard liegt unter /admin/jobs, für Benutzer mit der Job-Berechtigung; die Admin-Seite Dienste zeigt es als Kachel. Blockieren Sie nie einen Job, um auf einen anderen zu warten; planen Sie stattdessen einen Folgejob ein.