概述: 使用 .NET 构建可靠、自我维持的 API 时,计划一个或多个后台任务几乎是不可避免的。一些软件包已经存在多年,例如 Hangfire 和 Quartz.NET。ASP.NET Core 允许将后台任务实现为托管服务。但是,您可能需要一些更可自定义和轻量级的东西,语法更简单。我介绍Coravel。Cravel是一个用于.NET的开源轻量级库,允许您在 ASP.NET Core应用程序中轻松执行后台处理和调度。Cravel通过使任务/作业调度、排队、缓存、邮件(等等)等高级应用程序功能易于访问和易于使用,帮助开发人员快速启动和运行他们的.NET应用程序。调度语法Coravel 的灵感来自 La
使用 .NET 构建可靠、自我维持的 API 时,计划一个或多个后台任务几乎是不可避免的。一些软件包已经存在多年,例如 Hangfire 和 Quartz.NET。
ASP.NET Core 允许将后台任务实现为托管服务。但是,您可能需要一些更可自定义和轻量级的东西,语法更简单。我介绍Coravel。
Cravel 是一个用于.NET的开源轻量级库,允许您在 ASP.NET Core应用程序中轻松执行后台处理和调度。Cravel通过使任务/作业调度、排队、缓存、邮件(等等)等高级应用程序功能易于访问和易于使用,帮助开发人员快速启动和运行他们的.NET应用程序。
调度语法
Coravel 的灵感来自 Laravel 的任务计划程序,它建立在 .NET Core 内置依赖项注入之上。它使用 Fluent API 来计划任务,让您轻松指定任务的频率、开始时间和结束时间。它还提供了一种对后台作业进行排队和处理的简单方法,使您能够轻松处理大量数据或执行长时间运行的任务。
为什么使用Cravel进行调度?
与 Hangfire 和 Quartz.net 等替代品相比,它重量轻。
它是近乎零的配置,只需最少的代码行即可完成工作。
它易于使用,语法简单
它支持 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 classExpiryJobInvocable : IInvocable
{
privatereadonlyICatalogueService _catalogueService;
privatereadonlyILogger<ExpiryJobInvocable> _logger;
publicExpiryJobInvocable(ICatalogueService catalogueService, ILogger<ExpiryJobInvocable> logger)
{
_logger = logger;
_catalogueService = catalogueService;
}
publicasyncTaskInvoke()
{
await _catalogueService.ExpireCatalogueListing();
}
}
使用依赖注入注册可调用文件如下所示:
publicstaticIServiceCollectionRegisterCoravelScheduler(thisIServiceCollection 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.
publicinterfaceIScheduleInterval
{
IScheduledEventConfigurationEveryMinute();
IScheduledEventConfigurationEveryFiveMinutes();
IScheduledEventConfigurationEveryTenMinutes();
IScheduledEventConfigurationEveryFifteenMinutes();
IScheduledEventConfigurationEveryThirtyMinutes();
IScheduledEventConfigurationHourly();
IScheduledEventConfigurationHourlyAt(int minute);
IScheduledEventConfigurationDaily();
IScheduledEventConfigurationDailyAtHour(int hour);
IScheduledEventConfigurationDailyAt(int hour, int minute);
IScheduledEventConfigurationWeekly();
IScheduledEventConfigurationMonthly();
IScheduledEventConfigurationCron(string cronExpression);
IScheduledEventConfigurationEverySecond();
IScheduledEventConfigurationEveryFiveSeconds();
IScheduledEventConfigurationEveryTenSeconds();
IScheduledEventConfigurationEveryFifteenSeconds();
IScheduledEventConfigurationEveryThirtySeconds();
IScheduledEventConfigurationEverySeconds(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# 类,表示您可以发送的特定类型的电子邮件,例如「新用户注册」、「已完成的订单」等。
如果你喜欢我的文章,请给我一个赞!谢谢