當前位置: 妍妍網 > 碼農

在 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# 類,表示您可以發送的特定型別的電子信件,例如「新使用者註冊」、「已完成的訂單」等。

    如果你喜歡我的文章,請給我一個贊!謝謝