55 lines
1.9 KiB
C#
55 lines
1.9 KiB
C#
using Hangfire;
|
|
using Microsoft.Extensions.Hosting;
|
|
using Microsoft.Extensions.Logging;
|
|
using Microsoft.Extensions.Options;
|
|
using TrackCenter.Application.Helpers;
|
|
using TrackCenter.Application.Options;
|
|
using TrackCenter.Application.Services.TimerTaskss;
|
|
|
|
namespace TrackCenter.Application.HostServices;
|
|
|
|
public class TrackTaskComponentHostedService : IHostedService
|
|
{
|
|
private readonly IOptionsMonitor<TrackAppOptions> _optionsMonitor;
|
|
private TrackAppOptions? _oldOptions;
|
|
private readonly ILogger<TrackTaskComponentHostedService> _logger;
|
|
|
|
public TrackTaskComponentHostedService(IOptionsMonitor<TrackAppOptions> optionsMonitor, ILogger<TrackTaskComponentHostedService> logger)
|
|
{
|
|
_optionsMonitor = optionsMonitor;
|
|
_logger = logger;
|
|
var onChanged = DebounceHelper.WrapMethod(TimeSpan.FromSeconds(1), () => { ReloadConfig(optionsMonitor); });
|
|
optionsMonitor.OnChange(_ => onChanged.Debounce());
|
|
}
|
|
|
|
public Task StartAsync(CancellationToken cancellationToken)
|
|
{
|
|
ReloadConfig(_optionsMonitor);
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
public Task StopAsync(CancellationToken cancellationToken)
|
|
{
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
private void ReloadConfig(IOptionsMonitor<TrackAppOptions> optionsMonitor)
|
|
{
|
|
var newVal = optionsMonitor.CurrentValue;
|
|
_logger.LogInformation("轨迹任务配置,轨迹刷新执行周期{a}min",
|
|
newVal.TrackPullTaskMinuteInterval
|
|
);
|
|
// 轨迹刷新任务
|
|
if ((_oldOptions?.TrackPullTaskMinuteInterval ?? 0) != newVal.TrackPullTaskMinuteInterval)
|
|
{
|
|
var q = GlobalConst.TaskQueueLevelDict[_optionsMonitor.CurrentValue.TrackPullTaskLevel];
|
|
RecurringJob.AddOrUpdate<TrackPullTask>("Execute_TrackPullTask",
|
|
q,
|
|
x => x.RefreshForTaskAsync(),
|
|
$"*/{newVal.TrackPullTaskMinuteInterval} * * * *");
|
|
}
|
|
|
|
_oldOptions = newVal;
|
|
}
|
|
}
|