在 ASP.NET Core中使用Cravel作为调度程序

作者:微信公众号:【架构师老卢】
2-19 18:57
28

概述:使用 .NET 构建可靠、自我维持的 API 时,计划一个或多个后台任务几乎是不可避免的。一些软件包已经存在多年,例如 Hangfire 和 Quartz.NET。ASP.NET Core 允许将后台任务实现为托管服务。但是,您可能需要一些更可自定义和轻量级的东西,语法更简单。我介绍Coravel。Cravel是一个用于.NET的开源轻量级库,允许您在 ASP.NET Core应用程序中轻松执行后台处理和调度。Cravel通过使任务/作业调度、排队、缓存、邮件(等等)等高级应用程序功能易于访问和易于使用,帮助开发人员快速启动和运行他们的.NET应用程序。调度语法Coravel 的灵感来自 La

使用 .NET 构建可靠、自我维持的 API 时,计划一个或多个后台任务几乎是不可避免的。一些软件包已经存在多年,例如 HangfireQuartz.NET

ASP.NET Core 允许将后台任务实现为托管服务。但是,您可能需要一些更可自定义和轻量级的东西,语法更简单。我介绍Coravel。

Cravel是一个用于.NET的开源轻量级库,允许您在 ASP.NET Core应用程序中轻松执行后台处理和调度。Cravel通过使任务/作业调度、排队、缓存、邮件(等等)等高级应用程序功能易于访问和易于使用,帮助开发人员快速启动和运行他们的.NET应用程序。

调度语法

Coravel 的灵感来自 Laravel 的任务计划程序,它建立在 .NET Core 内置依赖项注入之上。它使用 Fluent API 来计划任务,让您轻松指定任务的频率、开始时间和结束时间。它还提供了一种对后台作业进行排队和处理的简单方法,使您能够轻松处理大量数据或执行长时间运行的任务。

为什么使用Cravel进行调度?

  1. 与 Hangfire 和 Quartz.net 等替代品相比,它重量轻。
  2. 它是近乎零的配置,只需最少的代码行即可完成工作。
  3. 它易于使用,语法简单
  4. 它支持 async/await,并且非常高效。

卡拉维尔专业版

Coravel Pro是一个专业的管理面板,具有可无缝集成到.NET Core应用中的可视化工具。

功能包括:

  • 数据库持久化调度
  • 一个漂亮的用户界面来管理您的作业/可调用对象
  • 运行状况指标仪表板
  • 轻松配置数据的表格报告(支持聚合/复杂投影)

如果你喜欢 Coravel,正在使用 EF Core 生成 .NET Core 应用,并且想要更多很棒的工具,请查看!

要求

Coravel 是专为 .NET Core 应用设计的 .NET Standard 库。 将 Coravel 包含在现有 .NET Core 应用程序(版本 2.1.0+)或其他 .NET Standard 项目中。

安装

Coravel 需要 nuget 包才能开始使用。Coravel

dotnet add package coravel

任务/作业调度

通常,您必须通过 Windows 任务计划程序配置 cron 作业或任务,才能运行单个或多个重复出现的任务。

使用 Coravel,您可以使用简单、优雅、流畅的语法在一个地方设置所有计划任务——在代码中!

可调用对象表示应用程序中的独立作业。创建可调用对象使用共享接口。使用 .NET Core 的依赖项注入服务,可调用项将在执行时注入其所有依赖项。Coravel.Invocable.IInvocable

下面是创建可调用 (Job) 的示例代码:

public class ExpiryJobInvocable : IInvocable  
{  
  private readonly ICatalogueService _catalogueService;  
  private readonly ILogger<ExpiryJobInvocable> _logger;     
  public ExpiryJobInvocable(ICatalogueService catalogueService, ILogger<ExpiryJobInvocable> logger)  
  {  
    _logger = logger;  
    _catalogueService = catalogueService;                 
  }  
  public async Task Invoke()  
  {  
    await _catalogueService.ExpireCatalogueListing();  
  }  
}

使用依赖注入注册可调用文件如下所示:

public static IServiceCollection RegisterCoravelScheduler(this IServiceCollection services)  
{  
    services.AddScheduler();  
    services.AddTransient<ExpiryJobInvocable>();  
    return services;  
}

另外,不要忘记通过指定频率在应用程序构建器中注册。它公开了预配置的方法,其中包括 cron 表达式语法。

var app = builder.Build();  
app.Services.UseScheduler(scheduler =>  
{  
    scheduler.Schedule<ExpiryJobInvocable>().EveryMinute().PreventOverlapping(nameof(ExpiryJobInvocable));   
}).LogScheduledTaskProgress(app.Services.GetRequiredService<ILogger<IScheduler>>());

以下是可用于指定频率的方法:

//  
// Summary:  
//     Defines methods available to you for specifying the frequency of how often your  
//     scheduled tasks will run.  
public interface IScheduleInterval  
{  
    IScheduledEventConfiguration EveryMinute();  
    IScheduledEventConfiguration EveryFiveMinutes();  
    IScheduledEventConfiguration EveryTenMinutes();  
    IScheduledEventConfiguration EveryFifteenMinutes();  
    IScheduledEventConfiguration EveryThirtyMinutes();  
    IScheduledEventConfiguration Hourly();  
    IScheduledEventConfiguration HourlyAt(int minute);  
    IScheduledEventConfiguration Daily();  
    IScheduledEventConfiguration DailyAtHour(int hour);  
    IScheduledEventConfiguration DailyAt(int hour, int minute);  
    IScheduledEventConfiguration Weekly();  
    IScheduledEventConfiguration Monthly();  
    IScheduledEventConfiguration Cron(string cronExpression);  
    IScheduledEventConfiguration EverySecond();  
    IScheduledEventConfiguration EveryFiveSeconds();  
    IScheduledEventConfiguration EveryTenSeconds();  
    IScheduledEventConfiguration EveryFifteenSeconds();  
    IScheduledEventConfiguration EveryThirtySeconds();  
    IScheduledEventConfiguration EverySeconds(int seconds);  
}

除了任务调度之外,Cravel还支持其他功能。我总结了其中的一些,并随意使用它们。

排队

Corevel为您提供了一个在内存中运行的零配置队列。这对于将冗长的任务卸载到后台非常有用,而不是让用户等待其 HTTP 请求完成。

有关使用 Coravel 的队列功能的更多信息,请查看文档页面e。

缓存

Cravel提供了一个易于使用的API,用于在.NET Core应用程序中进行缓存。默认情况下,它使用内存中缓存。Corevel还提供了一些数据库驱动程序,用于更强大的方案。

有关使用 Coravel 的缓存功能的更多信息,请查看文档页面

活动广播

Coravel 的事件广播允许侦听器订阅应用程序中发生的事件。这是构建可维护应用程序的好方法,其部件是松散耦合的!

有关使用 Coravel 事件功能的更多信息,请查看文档页面

邮件

电子邮件并不像应有的那么容易。幸运的是,卡拉维尔通过提供以下功能解决了这个问题:

  • 内置电子邮件友好剃须刀模板
  • 简单灵活的邮件 API
  • 通过ASP控制器等呈现您的电子邮件以进行可视化测试。
  • 支持 SMTP、通过电子邮件发送到本地日志文件或 BYOM(“自带邮件程序”)驱动程序的驱动程序
  • 通过以下方式进行快速简单的配置appsettings.json

Cravel使用Mailables发送邮件。每个 Mailable 都是一个 c# 类,表示您可以发送的特定类型的电子邮件,例如“新用户注册”、“已完成的订单”等。

相关留言评论
昵称:
邮箱:
阅读排行