Αυτό το άρθρο εξετάζει τη ρύθμιση του Hangfire με ASP.NET Core και έναν διακομιστή SQL. Το Hangfire παρέχει μια λύση για την εκτέλεση επαναλαμβανόμενων εργασιών και εργασιών παρασκηνίου με έναν εξαιρετικό πίνακα ελέγχου για την παρακολούθηση των συμβάντων.
Κώδικας: https://github.com/damienbod/AspNetCoreHangfire
Ιστορία
2023-02-21 Διόρθωση Διαγραφή εργασίας παρασκηνίου για διαγραφή επαναλαμβανόμενης εργασίας, σχόλια από τον Alex
Η εφαρμογή ASP.NET Core χρησιμοποιεί δύο πακέτα Hangfire Nuget για να ενσωματώσει τη διαχείριση συμβάντων στη λύση.
- Hangfire.AspNetCore
- Hangfire.SqlServer
Το αρχείο προγράμματος αρχικοποιεί τις υπηρεσίες και προσθέτει το ενδιάμεσο λογισμικό στο έργο. Ο SQL Server ρυθμίζεται χρησιμοποιώντας τις μεθόδους επέκτασης από τα πακέτα Hangfire Nuget και χρησιμοποιεί μια συμβολοσειρά σύνδεσης από τις ρυθμίσεις της εφαρμογής υπό ανάπτυξη.
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
var services = builder.Services;
var configuration = builder.Configuration;
var env = builder.Environment;
services.AddHangfire(hangfire =>
{
hangfire.SetDataCompatibilityLevel(CompatibilityLevel.Version_170);
hangfire.UseSimpleAssemblyNameTypeSerializer();
hangfire.UseRecommendedSerializerSettings();
hangfire.UseColouredConsoleLogProvider();
hangfire.UseSqlServerStorage(
configuration.GetConnectionString("HangfireConn"),
new SqlServerStorageOptions
{
CommandBatchMaxTimeout = TimeSpan.FromMinutes(5),
SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5),
QueuePollInterval = TimeSpan.Zero,
UseRecommendedIsolationLevel = true,
DisableGlobalLocks = true
});
var server = new BackgroundJobServer(new BackgroundJobServerOptions
{
ServerName = "hangfire-test",
});
});
// other services...
var app = builder.Build();
app.UseHangfireDashboard();
// more middleware...
app.Run();
}
Ρύθμιση βάσης δεδομένων SQL
Η βάση δεδομένων SQL ρυθμίζεται χρησιμοποιώντας την τεκμηρίωση Hangfire.
https://docs.hangfire.io/en/latest/configuration/using-sql-server.html
Η πυρκαγιά γραφή μπορεί να βρεθεί στο αποθετήριο hangfire. Πρόσθεσα επίσης ένα αντίγραφο αυτού του σεναρίου στο αποθετήριο επίδειξης: hangfire-default-install.sql
Δημιουργήστε μια επαναλαμβανόμενη εργασία
Τώρα που έχει ρυθμιστεί το Hangfire, μπορούν να δημιουργηθούν θέσεις εργασίας. Χρησιμοποιώ μια κλάση για να εφαρμόσω τη μέθοδο που καλείται μετά την ενεργοποίηση ενός συμβάντος Hangfire. Η μέθοδος πρέπει να είναι επανεισαγωγής και πρέπει να χειρίζεται τις εξαιρέσεις.
public class MyRecurringJob : IMyRecurringJob
{
public void DoSomethingReentrant()
{
Console.WriteLine("IMyRecurringJob doing something");
}
}
Η εργασία μπορεί να δημιουργηθεί χρησιμοποιώντας το RecurringJob.AddOrUpdate μέθοδος. Αυτό προσθέτει την εργασία στη βάση δεδομένων SQL.
RecurringJob.AddOrUpdate<IMyRecurringJob>(
job => job.DoSomethingReentrant(), Cron.Hourly);
Δημιουργήστε μια εργασία φόντου
Μια εργασία παρασκηνίου Hnagfire μπορεί να δημιουργηθεί χρησιμοποιώντας το BackgroundJob.Enqueue μέθοδος. Οι μέθοδοι έχουν διάφορες παραμέτρους που μπορούν να χρησιμοποιηθούν και καλύπτουν το μεγαλύτερο μέρος του συμβάντος, απαιτήσεις εργασίας που μπορεί να υπάρχουν.
BackgroundJob.Enqueue<IMyBackgroundJob>(x => x.DoSomethingReentrant());
Διαγραφή επαναλαμβανόμενων εργασιών
Η διαγραφή των εργασιών απαιτείται εάν αναπτύσσετε τακτικά καθώς δημιουργούνται διαφορετικές παρουσίες και δημιουργούνται νέες επαναλαμβανόμενες εργασίες. Ο παρακάτω κώδικας καθιστά δυνατή τη διαγραφή των επαναλαμβανόμενων jonbs.
using (var connection = JobStorage.Current.GetConnection())
{
foreach (var recurringJob in connection.GetRecurringJobs())
{
RecurringJob.RemoveIfExists(recurringJob.Id);
}
}
Εκτέλεση των εφαρμογών
Όταν δημιουργούνται οι εφαρμογές και μπορούν να δημιουργηθούν ή να διαγραφούν διαφορετικές εργασίες.

Πίνακας ελέγχου Hangfire
Το Hangfire παρέχει έναν εξαιρετικό πίνακα εργαλείων που μπορεί να εμφανίσει τις εκτελούμενες ή αποτυχημένες εργασίες και τις διαφορετικές ρυθμίσεις διακομιστή.

Σημειώσεις
Αυτή είναι μόνο η βασική ρύθμιση του Hangfire. Μπορείτε να ενσωματώσετε το Hangfire με διάφορους τρόπους σε μια λύση, αλλά το KISS θα πρέπει πάντα να ακολουθείτε. Η χρήση συμβάντων εντός λύσεων είναι ήδη περίπλοκη και απαιτεί επιπλέον εργαλεία για την παρακολούθηση και τον εντοπισμό σφαλμάτων. Θα πρέπει επίσης να το χρησιμοποιήσετε μόνο εάν το απαιτεί η επιχειρηματική λογική. Για να χρησιμοποιήσετε το Hangfire σε μια επαγγελματική λύση, θα πρέπει να προσθέσετε ασφάλεια στον πίνακα εργαλείων, πιθανώς να εισάγετε υπηρεσίες μέσα στον κώδικα που εκτελεί τις εργασίες που έχουν προβλήματα, να προσθέσετε καταγραφή και ο κώδικας εκτέλεσης πρέπει να εισαχθεί ξανά λόγω επαναλήψεων.
Το Hangfire είναι ένα εξαιρετικό εργαλείο όπως και με πολλά άλλα εργαλεία, λύσεις για αυτό το είδος προβλήματος. Οι θέσεις εργασίας πρέπει να επανεισαχθούν. Για ροές εργασίας μεγάλης διάρκειας που απαιτούν επιμονή, ίσως άλλα εργαλεία θα ήταν η καλύτερη επιλογή, για παράδειγμα ανθεκτικές λειτουργίες Azure ή αυτοματοποίηση ισχύος. Οι υπηρεσίες παρασκηνίου λειτουργούν επίσης πολύ καλές για απλές εργασίες. Μπορεί επίσης να χρησιμοποιηθεί ASP.NET Core Quartz. Όλα αυτά τα εργαλεία είναι πολύ καλά και θα πρέπει να προσπαθήσετε να επιλέξετε αυτό που ταιριάζει καλύτερα στις ανάγκες σας και ακολουθεί την αρχή του KISS.
Συνδέσεις
https://docs.hangfire.io/
https://docs.hangfire.io/en/latest/getting-started/aspnet-core-applications.html
https://jonhilton.net/simple-background-jobs-with-hangfire-and-aspnet-core/