Coravel:一个可轻松实现任务调度、队列、邮件发送的开源项目

news/2025/1/5 16:16:39/文章来源:https://www.cnblogs.com/chingho/p/18624779

推荐一个轻量级的任务调度开源项目。

01 项目简介

Coravel是一个.NET开源任务调度库,只需简单代码、几乎零配置就可以实现多种功能柜,如任务调度、队列、缓存、事件广播和邮件发送等。该项目特点就是让这些通常复杂的功能变得易于访问和使用,同时提供简洁、直观的语法。

02 核心功能

1、任务/作业调度:通过其流畅的代码内语法,让你能够轻松地在应用程序中设置和管理这些任务。

2、队列:提供了一个开箱即用的队列系统,它使用内存作为后端来异步处理任务,从而不会阻塞用户的 HTTP 请求,改善了应用的性能和用户体验。

3、缓存:为了提高应用程序的响应速度,Coravel 提供了一个简单易用的缓存 API。默认情况下,它使用内存缓存,但也支持数据库驱动(SQL Server、PostgreSQL),也可以自定义扩展缓存接口,以适应更复杂的缓存需求。

4、事件广播:可以构建松耦合的应用程序组件,这有助于提高应用程序的可维护性和灵活性。

5、邮件发送:简化了邮件发送过程,提供了内置的电子邮件友好的 Razor 模板、简单灵活的邮件 API,并且支持渲染电子邮件以进行视觉测试。此外,它还支持 SMTP、本地日志文件或自定义邮件器驱动程序。

03 使用示例

1、安装依赖库

dotnet tool install --global coravel-cli

2、任务调度

//启用
services.AddScheduler();var provider = app.ApplicationServices;
provider.UseScheduler(scheduler =>
{scheduler.Schedule(() => Console.WriteLine("工作日每一分钟执行一次。")).EveryMinute().Weekday();
});

3、队列

IQueue _queue;public HomeController(IQueue queue) {this._queue = queue;
}//使用队列
this._queue.QueueAsyncTask(async() => {await Task.Delay(1000);Console.WriteLine("这是队列!");});

4、广播

var provider = app.ApplicationServices;
IEventRegistration registration = provider.ConfigureEvents();//注册和监听
registration.Register<BlogPostCreated>().Subscribe<TweetNewPost>().Subscribe<NotifyEmailSubscribersOfNewPost>();

5、发送邮件

using Coravel.Mailer.Mail;
using App.Models;namespace App.Mailables
{public class NewUserViewMailable : Mailable<UserModel>{private UserModel _user;public NewUserViewMailable(UserModel user) => this._user = user;public override void Build()
{this.To(this._user).From("from@test.com").View("~/Views/Mail/NewUser.cshtml", this._user);}}
}

04 项目地址

https://github.com/jamesmh/coravel

更多开源项目: https://github.com/bianchenglequ/NetCodeTop

- End -

推荐阅读

推荐一个C#轻量级矢量图形库

.NET日志库:Serilog、NLog、Log4Net等十大开源日志库大盘点!

推荐5个.Net版本 Redis 客户端开源库

ImageSharp:高性能跨平台.NET开源图形库

盘点3个.Net热门HTTP开源库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/863342.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Listary 6.3.1.85 Windows文件管理:高效文件管理工具

点击上方蓝字关注我 前言 Listary是一个非常实用的Windows文件管理小帮手,它能让找文件和管理文件变得更快更容易。用了它,你可以更快地搜索到想要的文件或程序,还能通过一些快捷操作快速到达文件所在的位置。更重要的是,Listary能和Windows自带的文件管理器以及其他常用的…

断点输出大法快速定位编程错误

断点&输出大法快速定位编程错误 1、断点法 点红框位置就可以加每行代码的断点 再按F5进行debug断点&输出大法快速定位编程错误 1、断点法 点红框位置就可以加每行代码的断点再按F5进行debug操作,在下面的窗口看各函数的值 这种方法经常用在循环出现问题时进行处理 举个…

Nginx的referer参数的用法和原理

​ Nginx的referer参数是用于控制HTTP请求中的Referer字段的相关配置。这个参数的主要作用是限制或允许特定来源网站的访问,以加强安全性或控制流量。 用法:限制特定来源网站的访问: 可以使用referer参数来配置Nginx,使其只允许来自指定来源网站的请求。这有助于防止盗链或…

.Net程序员机会来了,微软官方新推出一个面向Windows开发者本地运行AI模型的开源工具

想要开发AI产品的.Net程序员机会来了,这个项目应该好好研究。 虽然说大模型基本都有提供网络API,但肯定没有直接使用本地模型速度快。 最近微软官方新推出AI Dev Gallery开源项目,可以帮助Windows开发人员学习如何将具有本地模型和API的AI添加到Windows应用程序中。01 项目简…

ABB工业机器人SIB-V板维修细节分享

要判断ABB机器人SIB-v板是否需要更换,可以从以下几个方面进行评估: - 检查SIB-v板的状态:查看SIB-v板是否有明显的物理损坏,如烧焦、裂纹或其他损坏迹象。 - 检查连接情况:确保SIB-v板与其他组件的连接牢固,没有松动或腐蚀。 - 检查电池状态:如果SIB-v板上有…

KUKA机械臂驱动器600-20 1X64 UL故障维修细节

库卡机器人作为工业自动化的重要设备,其稳定性和可靠性对于生产线的正常运转至关重要。然而,在使用过程中,KUKA机械臂驱动器故障是不可避免的问题之一。 一、常见KUKA机械手驱动器故障及原因分析 1. 过热故障 过热是常见的库卡工业机器人驱动器600-20 1X64 UL故障之一。这通…

PostgreSQL技术大讲堂 - 第77讲:DB4AI 搭建PG向量数据库AI机器人

PostgreSQL技术大讲堂 - 第77讲,主题:DB4AI 搭建PG向量数据库AI机器人 讲课内容: 1、 向量搜索引擎(PGVector)介绍 2、 向量与Embeddings的定义 3、 向量间的相似度计算方法演示 4、检索增强生成模型(RAG)介绍 5、PG向量数据库+通义千问大模型实现AI机器人 目前主流的关系型…

ABAP excel上传时,数字带文本逗号 转ABAP数量QUAN金额CURR 格式

主要使用 函数MOVE_CHAR_TO_NUM 或者 UNITS_STRING_CONVERT 第二个需要限制客户SU3 参数配置X 或者函数入参默认X, excel导出默认时X格式, 样例参考代码*&---------------------------------------------------------------------* *& Report YWWZ_TEST57 *&…

11 个必备 Docker 工具

​ 1. LazyDocker命令行下的 Docker 管理利器LazyDocker 是一个为命令行用户设计的友好型终端工具,用于管理 Docker 容器、镜像和存储卷。它适合那些习惯于命令行操作但又希望拥有直观界面的用户。 通过 LazyDocker,你可以一站式查看容器的状态、资源消耗、日志等详细信息,并…

大语言模型提示技巧(三)-迭代式提示

大语言模型还没有达到能够准确猜测人类意图的程度,此时它不能立即反馈出令人满意的答复,我们需要做的是对大语言模型进行迭代式提示,反复推进,直至大语言模型给出了令人满意的答案。我们与大语言模型交互时,往往给出的提示过于简略,而大语言模型还没有达到能够准确猜测你…

spring 中 Bean 的生命周期

spring 中 Bean 的生命周期是怎样的?原文 连环18问 https://mp.weixin.qq.com/s/liWn2Dn91cmuiqHSxVO_fASpringBean 生命周期大致分为4个阶段:1.「实例化」,实例化该 Bean 对象2.「填充属性」,给该 Bean 赋值3.「初始化」如果实现了 Aware 接口,会通过其接口获取容器资源如…