6.1 KiB
Gerenciador de Tarefas em Segundo Plano Quartz
Quartz é um avançado gerenciador de tarefas em segundo plano. Você pode integrar o Quartz com o ABP Framework para usá-lo em vez do gerenciador de tarefas em segundo plano padrão. Dessa forma, você pode usar a mesma API de tarefas em segundo plano para o Quartz e seu código será independente do Quartz. Se preferir, você também pode usar diretamente a API do Quartz.
Consulte o documento de tarefas em segundo plano para aprender como usar o sistema de tarefas em segundo plano. Este documento mostra apenas como instalar e configurar a integração com o Quartz.
Instalação
É sugerido usar o ABP CLI para instalar este pacote.
Usando o ABP CLI
Abra uma janela de linha de comando na pasta do projeto (arquivo .csproj) e digite o seguinte comando:
abp add-package Volo.Abp.BackgroundJobs.Quartz
Se você ainda não o fez, primeiro precisa instalar o ABP CLI. Para outras opções de instalação, consulte a página de descrição do pacote.
Instalação Manual
Se você deseja instalar manualmente:
-
Adicione o pacote NuGet Volo.Abp.BackgroundJobs.Quartz ao seu projeto:
Install-Package Volo.Abp.BackgroundJobs.Quartz -
Adicione o
AbpBackgroundJobsQuartzModuleà lista de dependências do seu módulo:
[DependsOn(
//...outras dependências
typeof(AbpBackgroundJobsQuartzModule) //Adicione a nova dependência do módulo
)]
public class SeuModulo : AbpModule
{
}
Configuração
O Quartz é uma biblioteca muito configurável e o framework ABP fornece AbpQuartzOptions para isso. Você pode usar o método PreConfigure na classe do seu módulo para pré-configurar essa opção. O ABP a usará ao inicializar o módulo Quartz. Por exemplo:
[DependsOn(
//...outras dependências
typeof(AbpBackgroundJobsQuartzModule) //Adicione a nova dependência do módulo
)]
public class SeuModulo : AbpModule
{
public override void PreConfigureServices(ServiceConfigurationContext context)
{
var configuration = context.Services.GetConfiguration();
PreConfigure<AbpQuartzOptions>(options =>
{
options.Properties = new NameValueCollection
{
["quartz.jobStore.dataSource"] = "BackgroundJobsDemoApp",
["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz",
["quartz.jobStore.tablePrefix"] = "QRTZ_",
["quartz.serializer.type"] = "json",
["quartz.dataSource.BackgroundJobsDemoApp.connectionString"] = configuration.GetConnectionString("Quartz"),
["quartz.dataSource.BackgroundJobsDemoApp.provider"] = "SqlServer",
["quartz.jobStore.driverDelegateType"] = "Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz",
};
});
}
}
A partir da versão 3.1 do ABP, adicionamos o Configurator ao AbpQuartzOptions para configurar o Quartz. Por exemplo:
[DependsOn(
//...outras dependências
typeof(AbpBackgroundJobsQuartzModule) //Adicione a nova dependência do módulo
)]
public class SeuModulo : AbpModule
{
public override void PreConfigureServices(ServiceConfigurationContext context)
{
var configuration = context.Services.GetConfiguration();
PreConfigure<AbpQuartzOptions>(options =>
{
options.Configurator = configure =>
{
configure.UsePersistentStore(storeOptions =>
{
storeOptions.UseProperties = true;
storeOptions.UseJsonSerializer();
storeOptions.UseSqlServer(configuration.GetConnectionString("Quartz"));
storeOptions.UseClustering(c =>
{
c.CheckinMisfireThreshold = TimeSpan.FromSeconds(20);
c.CheckinInterval = TimeSpan.FromSeconds(10);
});
});
};
});
}
}
Você pode escolher a maneira que preferir para configurar o Quartz.
O Quartz armazena informações de tarefas e agendamento em memória por padrão. No exemplo, usamos a pré-configuração do padrão de opções para alterá-lo para o banco de dados. Para mais configurações do Quartz, consulte a documentação do Quartz.
Tratamento de Exceções
Estratégia de tratamento de exceções padrão
Quando ocorre uma exceção na tarefa em segundo plano, o ABP fornece a estratégia de tratamento padrão que tenta novamente a cada 3 segundos, até 3 vezes. Você pode alterar a contagem de tentativas e o intervalo de tentativa por meio das opções AbpBackgroundJobQuartzOptions:
[DependsOn(
//...outras dependências
typeof(AbpBackgroundJobsQuartzModule) //Adicione a nova dependência do módulo
)]
public class SeuModulo : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
Configure<AbpBackgroundJobQuartzOptions>(options =>
{
options.RetryCount = 1;
options.RetryIntervalMillisecond = 1000;
});
}
}
Personalizar a estratégia de tratamento de exceções
Você pode personalizar a estratégia de tratamento de exceções por meio das opções AbpBackgroundJobQuartzOptions:
[DependsOn(
//...outras dependências
typeof(AbpBackgroundJobsQuartzModule) //Adicione a nova dependência do módulo
)]
public class SeuModulo : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
Configure<AbpBackgroundJobQuartzOptions>(options =>
{
options.RetryStrategy = async (retryIndex, executionContext, exception) =>
{
// personalizar o tratamento de exceções
};
});
}
}
```</source>