电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

.Net Core使用Coravel實現(xiàn)任務(wù)調(diào)度的完整步驟

瀏覽:149日期:2022-06-08 13:50:37
目錄
  • 前言
  • 簡介
  • 用法
  • 原理
  • 總結(jié)
  • 參考鏈接

前言

前段時間需要在一個新項目里添加兩個后臺任務(wù),去定時請求兩個供應(yīng)商的API來同步數(shù)據(jù);由于項目本身只是一個很小的服務(wù),不太希望引入太重的框架,同時也沒持久化要求;于是我開始尋找在Quartz.Net、Hangfire之外,是否還有更為輕量級的框架滿足我的要求,最終我選擇了Coravel.

簡介

Coravel是一個專為.NET Core設(shè)計的.NET Standard庫,除了任務(wù)調(diào)度,還提供了像隊列、緩存、郵件等其它高級功能。特點就是對開發(fā)者十分友好,接入十分簡單、優(yōu)雅、流暢,接近于零配置。
作為一個生于2018年的年輕項目,后發(fā)優(yōu)勢明顯,一開始就是基于.Net Standard 2.0實現(xiàn),沒有歷史負擔(dān),同時又可以利用很多.Net Core新特性。

用法

首先安裝Coravel包

dotnet add package coravel

下面演示在.Net 6 Minimal API項目中接入Coravel并設(shè)置兩個定時任務(wù),是不是非常簡單:)

using Coravel;

var builder = WebApplication.CreateBuilder(args);

//只使用Coravel的任務(wù)調(diào)度功能
builder.Services.AddScheduler();

//注冊你自己的調(diào)度任務(wù)
builder.Services.AddTransient<YourCoravelJob1>();
builder.Services.AddTransient<YourCoravelJob2>();

var app = builder.Build();

//配置任務(wù)
app.Services.UseScheduler(scheduler =>
    {
scheduler.Schedule<YourCoravelJob1>().EveryFiveMinutes(); //每5分鐘執(zhí)行一次Job1
scheduler.Schedule<YourCoravelJob2>().Hourly().Monday(); // 每周一每小時執(zhí)行一次
    });

Coravel預(yù)先定義好了很多常用的間隔頻率,非常的全面,像上面用到的 EveryFiveMinutes() 和 Hourly(),是不是非常的簡單優(yōu)雅;當(dāng)然Coravel也支持Cron表達式。

Invocable 是Coravel中的核心概念,代表一個獨立的任務(wù),上面的YourCoravelJob1和YourCoravelJob2就是 Invocable,Coravel直接調(diào)度這些Invocable。
要創(chuàng)建你自己的Invocable,只需實現(xiàn) IInvocable接口,在 Invoke方法中編碼你的任務(wù)。

public class YourCoravelJob1 : IInvocable
    {
private readonly ILogger _logger;

public YourCoravelJob1(ILogger<YourCoravelJob1> logger)
{
    _logger = logger;
}

public async Task Invoke()
{
     _logger.LogInformation("start..");
}
    }
}

原理

Coravel使用是的.Net Core 2.0引入的IHostedService來實現(xiàn)后臺定時任務(wù)。(因此只有.Net Core 2.0以上的項目才能使用Coravel)

public interface IHostedService
{
    Task StartAsync(CancellationToken cancellationToken);
    Task StopAsync(CancellationToken cancellationToken);
}

SchedulerHost即實現(xiàn)了IHostedService接口,在 其StartAsync方法中,當(dāng)程序完全啟動時,注冊了一個的Timer

public Task StartAsync(CancellationToken cancellationToken)
{
    this._lifetime.ApplicationStarted.Register(InitializeAfterAppStarted);
    return Task.CompletedTask;
}

private void InitializeAfterAppStarted()
{
    this._timer = new Timer(this.RunSchedulerPerSecondAsync, null, TimeSpan.Zero, TimeSpan.FromSeconds(1));
}

private async void RunSchedulerPerSecondAsync(object state)
{
 if (this._schedulerEnabled)
 {
   await this._scheduler.RunSchedulerAsync();
  }
}

每秒調(diào)用 RunSchedulerAsync 激活到點的Invocable,同時會根據(jù)情況將任務(wù)分組,在單獨的線程分開執(zhí)行。從這里可以看到Coravel是支持秒級任務(wù)的。

在 StopAsync 方法中,會先等待正在執(zhí)行的任務(wù)完成才會關(guān)閉,這個功能還是比較重要。

public async Task StopAsync(CancellationToken cancellationToken)
{
    this._schedulerEnabled = false; // Prevents changing the timer from firing scheduled tasks.
    this._timer?.Change(Timeout.Infinite, 0);

    this._scheduler.CancelAllCancellableTasks();

    // If a previous scheduler execution is still running (due to some long-running scheduled task[s])
    // we don"t want to shutdown while they are still running.
    if (this._scheduler.IsRunning)
    {
this._logger.LogWarning(ScheduledTasksRunningMessage);
    }

    while (this._scheduler.IsRunning)
    {
await Task.Delay(50);
    }
}

總結(jié)

本文介紹一個對開發(fā)者友好的、輕量級、零配置的.Net Standard庫Coravel,并演示了如何使用Coravel在.Net 6 Minimal API中創(chuàng)建定時任務(wù),最后淺析了的實現(xiàn)原理。作為一個年輕的框架,Coravel站在了巨人的肩膀上,相比Quartz.Net、Hangfire,也擁有很多亮點特性,很值得嘗試。

到此這篇關(guān)于.Net Core使用Coravel實現(xiàn)任務(wù)調(diào)度的文章就介紹到這了,更多相關(guān).Net Core Coravel實現(xiàn)任務(wù)調(diào)度內(nèi)容請搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!

參考鏈接

  • https://github.com/jamesmh/coravel
  • https://docs.coravel.net
  • https://docs.microsoft.com/en-us/dotnet/core/extensions/generic-host
標(biāo)簽: ASP.NET
主站蜘蛛池模板: 智能型高压核相仪-自动开口闪点测试仪-QJ41A电雷管测试仪|上海妙定 | 深圳彩钢板_彩钢瓦_岩棉板_夹芯板_防火复合彩钢板_长鑫 | 昆明网络公司|云南网络公司|昆明网站建设公司|昆明网页设计|云南网站制作|新媒体运营公司|APP开发|小程序研发|尽在昆明奥远科技有限公司 | 西安耀程造价培训机构_工程预算实训_广联达实作实操培训 | 仓储笼_仓储货架_南京货架_仓储货架厂家_南京货架价格低-南京一品仓储设备制造公司 | 工业风机_环保空调_冷风机_工厂车间厂房通风降温设备旺成服务平台 | 黄石东方妇产医院_黄石妇科医院哪家好_黄石无痛人流医院 | 复合土工膜厂家|hdpe防渗土工膜|复合防渗土工布|玻璃纤维|双向塑料土工格栅-安徽路建新材料有限公司 | 托利多电子平台秤-高精度接线盒-托利多高精度电子秤|百科 | 会议会展活动拍摄_年会庆典演出跟拍_摄影摄像直播-艾木传媒 | 艺术涂料_进口艺术涂料_艺术涂料加盟_艺术涂料十大品牌 -英国蒙太奇艺术涂料 | 淬火设备-钎焊机-熔炼炉-中频炉-锻造炉-感应加热电源-退火机-热处理设备-优造节能 | 企典软件一站式企业管理平台,可私有、本地化部署!在线CRM客户关系管理系统|移动办公OA管理系统|HR人事管理系统|人力 | 广东成考网-广东成人高考网 | 烘干设备-热泵烘干机_广东雄贵能源设备有限公司 | 浙江红酒库-冰雕库-气调库-茶叶库安装-医药疫苗冷库-食品物流恒温恒湿车间-杭州领顺实业有限公司 | 施工围挡-施工PVC围挡-工程围挡-深圳市旭东钢构技术开发有限公司 | 碳刷_刷握_集电环_恒压簧_电刷厂家-上海丹臻机电科技有限公司 | 武汉刮刮奖_刮刮卡印刷厂_为企业提供门票印刷_武汉合格证印刷_现金劵代金券印刷制作 - 武汉泽雅印刷有限公司 | 全自动端子机|刺破式端子压接机|全自动双头沾锡机|全自动插胶壳端子机-东莞市傅氏兄弟机械设备有限公司 | 深圳天际源广告-形象堆头,企业文化墙,喷绘,门头招牌设计制作专家 | 智能家居全屋智能系统多少钱一套-小米全套价格、装修方案 | 视觉检测设备_自动化检测设备_CCD视觉检测机_外观缺陷检测-瑞智光电 | 捷码低代码平台 - 3D数字孪生_大数据可视化开发平台「免费体验」 | 选宝石船-陆地水上开采「精选」色选机械设备-青州冠诚重工机械有限公司 | 智慧农业|农业物联网|现代农业物联网-托普云农物联网官方网站 | 成都热收缩包装机_袖口式膜包机_高速塑封机价格_全自动封切机器_大型套膜机厂家 | 海日牌清洗剂-打造带电清洗剂、工业清洗剂等清洗剂国内一线品牌 海外整合营销-独立站营销-社交媒体运营_广州甲壳虫跨境网络服务 | 耐酸碱泵-自吸耐酸碱泵型号「品牌厂家」立式耐酸碱泵价格-昆山国宝过滤机有限公司首页 | PE拉伸缠绕膜,拉伸缠绕膜厂家,纳米缠绕膜-山东凯祥包装 | 首页|成都尚玖保洁_家政保洁_开荒保洁_成都保洁 | 盘式曝气器-微孔曝气器-管式曝气器-曝气盘-斜管填料 | 郑州市前程水处理有限公司 | 塑胶地板-商用PVC地板-pvc地板革-安耐宝pvc塑胶地板厂家 | 屏蔽泵厂家,化工屏蔽泵_维修-淄博泵业| 合肥网带炉_安徽箱式炉_钟罩炉-合肥品炙装备科技有限公司 | 并离网逆变器_高频UPS电源定制_户用储能光伏逆变器厂家-深圳市索克新能源 | 钢板仓,大型钢板仓,钢板库,大型钢板库,粉煤灰钢板仓,螺旋钢板仓,螺旋卷板仓,骨料钢板仓 | 不锈钢酒柜|恒温酒柜|酒柜定制|酒窖定制-上海啸瑞实业有限公司 | 万烁建筑设计院-建筑设计公司加盟,设计院加盟分公司,市政设计加盟 | 胃口福饺子加盟官网_新鲜现包饺子云吞加盟 - 【胃口福唯一官网】 | 天津试验仪器-电液伺服万能材料试验机,恒温恒湿标准养护箱,水泥恒应力压力试验机-天津鑫高伟业科技有限公司 |