Я новичок в Hangfire и обладаю минимальными знаниями о. net - ядро само по себе. Поэтому мне было поручено создать повторяющееся фоновое задание, которое обновляет указанный столбец c в таблице. Я наткнулся на Hangfire и решил использовать его. Я следовал этому учебнику и обновлял методы примерно так:
Startup.cs:
public IServiceProvider ConfigureServices(IServiceCollection services)
{
// Add Hangfire services.
services.AddHangfire(configuration => configuration
.SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
.UseSimpleAssemblyNameTypeSerializer()
.UseRecommendedSerializerSettings()
.UseSqlServerStorage(_appConfiguration.GetConnectionString("HangfireConnection"), new SqlServerStorageOptions
{
CommandBatchMaxTimeout = TimeSpan.FromMinutes(5),
SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5),
QueuePollInterval = TimeSpan.Zero,
UseRecommendedIsolationLevel = true,
UsePageLocksOnDequeue = true,
DisableGlobalLocks = true
}));
// Add the processing server as IHostedService
services.AddHangfireServer();
. . . . . . .
public void Configure(IApplicationBuilder app, IBackgroundJobClient backgroundJobs, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseAbp(options => { options.UseAbpRequestLocalization = false; }); // Initializes ABP framework.
app.UseHangfireDashboard();
. . . .
Теперь я создал класс библиотека, которая будет обрабатывать фоновые задания и запускать их так:
Startup.cs:
public IServiceProvider ConfigureServices(IServiceCollection services)
{
// Add Hangfire services.
services.AddHangfire(configuration => configuration
. . . .
);
// Add the processing server as IHostedService
services.AddHangfireServer();
//this one ↓
//process backgroundjobs queue
var jobInit = new JobsInitiator(_appConfiguration);
jobInit.InitiateQueue();
JobsInitiator.cs: (Этот класс находится в проекте библиотеки классов за пределами проекта моего приложения Web.Host)
public class JobsInitiator {
private readonly IMonitoringApi _monitoringApi;
private readonly IConfiguration Configuration;
public JobsInitiator(IConfiguration _config) {
Configuration = _config;
JobStorage.Current = new SqlServerStorage(Configuration.GetConnectionString("HangfireConnection"));
_monitoringApi = JobStorage.Current.GetMonitoringApi();
}
public void InitiateQueue() {
List<BackgroundJobBase> jobs = GetJobsForQueue();
foreach (BackgroundJobBase job in jobs) {
string jobName = job.JobName;
RecurringJob.AddOrUpdate(jobName, () => job.StartJob(), Helper.GetRecurrenceFromConfig(Configuration, jobName));
//Hangfire.Storage.Monitoring.JobDetailsDto jobDetails = _monitoringApi.JobDetails(jobName);
}
}
public List<BackgroundJobBase> GetJobsForQueue() {
List<BackgroundJobBase> jobs = new List<BackgroundJobBase>();
// Add background jobs here...
jobs.Add(new Jobs.SomeJobToBeDone(Configuration));
return jobs;
}
}
Теперь я нахожусь в контрольно-пропускном пункте. Я не могу понять, как получить доступ к нужным мне репозиториям, чтобы я мог обновлять нужные мне таблицы. Я делаю это правильно? Есть ли способ сделать эту работу?