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;
}
publicstring Payload { get; set; } = string.Empty;
publicasync Task Invoke()
{
_logger.LogInformation(Payload + ",執行時間:{time}", DateTime.Now);
await Task.CompletedTask;
}
}
系統預設佇列排程時間是30秒,當然可以透過在appsettings.json中添加如下配置來更改這個時間。
"Coravel": {
"Queue": {
"ConsummationDelay": 5
}
}