當前位置: 妍妍網 > 碼農

【庫】Coravel Queue佇列

2024-02-28碼農

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 } }