Open Source Web Application Framework for ASP.NET Core
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

97 lines
3.7 KiB

using System;
using System.Text.Json;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.BackgroundJobs.DemoApp.Shared.Jobs;
using Volo.Abp.BackgroundWorkers;
using Volo.Abp.Modularity;
using Volo.Abp.MultiTenancy;
namespace Volo.Abp.BackgroundJobs.DemoApp.Shared
{
[DependsOn(typeof(AbpMultiTenancyModule))]
public class DemoAppSharedModule : AbpModule
{
public override async Task OnApplicationInitializationAsync(ApplicationInitializationContext context)
{
var dynamicJobManager = context.ServiceProvider.GetRequiredService<IDynamicBackgroundJobManager>();
dynamicJobManager.RegisterHandler("CompileTimeDynamicJob", (ctx, ct) =>
{
using (var doc = JsonDocument.Parse(ctx.JsonData))
{
var value = doc.RootElement.TryGetProperty("value", out var prop)
? prop.GetString()
: doc.RootElement.TryGetProperty("Value", out prop)
? prop.GetString()
: null;
Console.WriteLine($"[DYNAMIC-COMPILE] {value}");
return Task.CompletedTask;
}
});
context.ServiceProvider
.GetRequiredService<SampleJobCreator>()
.CreateJobs();
await DynamicBackgroundWorkerDemoAsync(context);
}
private async Task DynamicBackgroundWorkerDemoAsync(ApplicationInitializationContext context)
{
var dynamicWorkerManager = context.ServiceProvider
.GetService<IDynamicBackgroundWorkerManager>();
if (dynamicWorkerManager == null)
{
return;
}
// AddAsync: Register a dynamic worker with a schedule and handler
await dynamicWorkerManager.AddAsync(
"DemoHeartbeatWorker",
new DynamicBackgroundWorkerSchedule
{
Period = 5000 //5 seconds
},
async (workerContext, cancellationToken) =>
{
Console.WriteLine($"[{DateTime.Now}] DemoHeartbeatWorker executed.");
await Task.CompletedTask;
}
);
// IsRegistered: Check if a dynamic worker is registered
var isRegistered = dynamicWorkerManager.IsRegistered("DemoHeartbeatWorker");
Console.WriteLine($"DemoHeartbeatWorker is registered: {isRegistered}");
// UpdateScheduleAsync: Update the schedule of an existing dynamic worker
var updated = await dynamicWorkerManager.UpdateScheduleAsync(
"DemoHeartbeatWorker",
new DynamicBackgroundWorkerSchedule
{
Period = 10000 //Change to 10 seconds
}
);
Console.WriteLine($"DemoHeartbeatWorker schedule updated: {updated}");
// RemoveAsync: Remove a dynamic worker
var removed = await dynamicWorkerManager.RemoveAsync("DemoHeartbeatWorker");
Console.WriteLine($"DemoHeartbeatWorker removed: {removed}");
// Re-add the worker to keep it running for demo purposes
await dynamicWorkerManager.AddAsync(
"DemoHeartbeatWorker",
new DynamicBackgroundWorkerSchedule
{
Period = 10000 //10 seconds
},
async (workerContext, cancellationToken) =>
{
Console.WriteLine($"[{DateTime.Now}] DemoHeartbeatWorker executed.");
await Task.CompletedTask;
}
);
}
}
}