【库】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
}
}
文章来源微信公众号
想要更快更方便的了解相关知识,可以关注微信公众号
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2022-02-23 自定义EventSource(四)IncrementingPollingCounter
2022-02-23 自定义EventSource(三)IncrementingEventCounter
2022-02-23 自定义EventSource(二)PollingCounter
2022-02-23 自定义EventSource(一)EventCounter