当前位置: 欣欣网 > 码农

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

2024-03-23码农


概述: 使用 .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进行调度?

  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 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# 类,表示您可以发送的特定类型的电子邮件,例如「新用户注册」、「已完成的订单」等。

    如果你喜欢我的文章,请给我一个赞!谢谢