Кварцевая работа не запускается

Я пытаюсь использовать Abp.Quartz для планирования заданий.

Работа с чистым ядром 2.2, ок 4.5

Я сделал все, как в документации здесь https://aspnetboilerplate.com/Pages/Documents/Quartz-Integration, разрешил только в методе PostInitialize.

В конце я попробовал точно так же, как в документах (запустить планировщик с контроллера).

Но это тоже не сработало. Работа не начинается.

namespace Cloud
{
    [DependsOn(typeof(AbpZeroCoreModule),
               typeof(AbpQuartzModule))]
    public class CloudCoreModule : AbpModule
    {
        public override void PreInitialize()
        {
        }

        public override void Initialize()
        {            
            IocManager.RegisterAssemblyByConvention(typeof(CloudCoreModule)
                      .GetAssembly());
        }

        public override void PostInitialize()
        {
             IocManager.Resolve<IQuartzScheduleJobManager>().ScheduleAsync<ApiRequestQueues.ApiRequestProcessor>(
                job =>
                {
                    job
                      .WithIdentity("RevolutApiProcessor")
                      .WithDescription("A job witch processing request front");
                },
                trigger =>
                {
                    trigger
                        .StartNow()
                        .WithSimpleSchedule(
                            schedule =>
                            {
                                schedule
                                    .RepeatForever()
                                    .WithIntervalInSeconds(5)
                                    .Build();
                            });

                });
        }
    }
}

а вот класс ApiRequestProcessor

public class ApiRequestProcessor : JobBase, ITransientDependency
{
    public override async Task Execute(IJobExecutionContext context)
    {
     //some work
    }
}

1 ответ

Лучше поздно на вечеринку, чем никогда.

Мне удалось заставить это работать, хотя и без Abp.Quartzупаковка. Если вы можете использовать стандартный пакет, выполните следующие действия:

  1. Определите и настройте свои задания как обычно в Startup.cs
  2. Убедитесь, что ваш класс реализует оба IJobза Quartzбыть счастливым, и ITransientDependencyдля ASP.NET Boilerplate, чтобы быть счастливым
  3. Очень важно, если ваш код работы использует DbContextв любом случае, вы должны убедиться, что [UnitOfWork]декоратор находится в вашем классе заданий (что в любом случае важно для обеспечения того, чтобы ваши задания выполнялись атомарно и не влияли на любые другие транзакции, которые могут происходить на вашем сервере)

Вкратце, работающий базовый класс заданий может выглядеть так:

      using System;
using Quartz;

namespace MyProject.MyJobService
{
    [UnitOfWork]
    public class SimpleJob : IJob, ITransientDependency
    {
        public async Task Execute(IJobExecutionContext context)
        { 
            Console.WriteLine("Hello from quartz job!");
        }
    }
}

Дополнительную информацию и обсуждение можно найти здесь (также как я наконец пришел к этому решению): https://github.com/aspnetboilerplate/aspnetboilerplate/issues/3757

Если вы сомневаетесь, внимательно прочитайте, что Quartz сообщает вам в выводе приложения — обычно это дает подсказки относительно того, что не так, но я уверен, что мое решение вам подойдет.

Другие вопросы по тегам