【库】Coravel Queue队列
Coravel 通过使高级应用程序功能(如任务/作业调度、排队、缓存、邮件(以及更多!))易于访问且易于使用,帮助开发人员快速启动并运行 .NET 应用程序。具有简单、富有表现力和直接的语法。

Coravel还提供了一种简单的Queue机制,通过把任务放入队列,系统会自动在30秒执行一次,每次都会把队列中的任务执行完毕。
使用队列首先要注入服务,通过Services.AddQueue完成。第一种使用方式是从服务容器中取到IQueue对象,然后通过QueueTask方法把具体执行任务添加到队列中,等待时间周期内的调用即可。第二种方法是通过定义继承了IInvocableWithPayload负载接口的负载类,这样的好处是任务功能集中处理,隔离性比较好,当然,在入队更时通过IQueue的QueueInvocableWithPayload<>方法来完成。
using Coravel; using Coravel.Invocable; using Coravel.Queuing.Interfaces; var builder = WebApplication.CreateBuilder(args); builder.Services.AddQueue(); builder.Services.AddTransient<MyQueueInvocable>(); var app = builder.Build(); app.MapGet("/addqueue1", (IQueue queue) => { var guid = queue.QueueTask(() => { app.Logger.LogInformation("简单的Queue"); }); app.Logger.LogInformation(guid.ToString()); }); app.MapGet("/addqueue2", (IQueue queue) => { var guid = queue.QueueInvocableWithPayload<MyQueueInvocable, string>("开始Queue,添加时间:" + DateTime.Now); app.Logger.LogInformation(guid.ToString()); }); app.Run(); /// <summary> /// 负载 /// </summary> public class MyQueueInvocable : IInvocable, IInvocableWithPayload<string> { readonly ILogger<MyQueueInvocable> _logger; public MyQueueInvocable(ILogger<MyQueueInvocable> logger) { _logger = logger; } public string Payload { get; set; } = string.Empty; public async Task Invoke() { _logger.LogInformation(Payload + ",执行时间:{time}", DateTime.Now); await Task.CompletedTask; } }
系统默认队列调度时间是30秒,当然可以通过在appsettings.json中添加如下配置来更改这个时间。
"Coravel": { "Queue": { "ConsummationDelay": 5 } }
文章来源微信公众号
想要更快更方便的了解相关知识,可以关注微信公众号

****欢迎关注我的asp.net core系统课程****
《asp.net core精要讲解》 https://ke.qq.com/course/265696
《asp.net core 3.0》 https://ke.qq.com/course/437517
《asp.net core项目实战》 https://ke.qq.com/course/291868
《基于.net core微服务》 https://ke.qq.com/course/299524
《asp.net core精要讲解》 https://ke.qq.com/course/265696
《asp.net core 3.0》 https://ke.qq.com/course/437517
《asp.net core项目实战》 https://ke.qq.com/course/291868
《基于.net core微服务》 https://ke.qq.com/course/299524

浙公网安备 33010602011771号