running ActivePassiveHostedService in singletone mode as default

This commit is contained in:
Alexey Bannov 2023-01-11 00:31:12 +03:00
parent 83fdaf0753
commit 070475af5b
4 changed files with 40 additions and 9 deletions

View File

@ -32,7 +32,8 @@ namespace ASC.Core.Common.Hosting;
public class RegisterInstanceManager<T> : IRegisterInstanceManager<T> where T : IHostedService
{
private readonly IRegisterInstanceDao<T> _registerInstanceRepository;
private readonly int _timeUntilUnregisterInSeconds;
private readonly int _timeUntilUnregisterInSeconds;
private readonly bool _isSingletoneMode;
public RegisterInstanceManager(IRegisterInstanceDao<T> registerInstanceRepository,
IConfiguration configuration)
{
@ -41,10 +42,18 @@ public class RegisterInstanceManager<T> : IRegisterInstanceManager<T> where T :
if (!int.TryParse(configuration["core:hosting:timeUntilUnregisterInSeconds"], out _timeUntilUnregisterInSeconds))
{
_timeUntilUnregisterInSeconds = 15;
}
if (!bool.TryParse(configuration["core:hosting:singletonMode"], out _isSingletoneMode))
{
_isSingletoneMode = true;
}
}
public async Task Register(string instanceId)
{
{
if (_isSingletoneMode) return;
var instances = await _registerInstanceRepository.GetAll();
var registeredInstance = instances.FirstOrDefault(x => x.InstanceRegistrationId == instanceId);
@ -75,7 +84,9 @@ public class RegisterInstanceManager<T> : IRegisterInstanceManager<T> where T :
}
public async Task<bool> IsActive(string instanceId)
{
{
if (_isSingletoneMode) return await Task.FromResult(true);
var instances = await _registerInstanceRepository.GetAll();
var instance = instances.FirstOrDefault(x => x.InstanceRegistrationId == instanceId);
@ -83,7 +94,9 @@ public class RegisterInstanceManager<T> : IRegisterInstanceManager<T> where T :
}
public async Task<List<string>> DeleteOrphanInstances()
{
{
if (_isSingletoneMode) return await Task.FromResult(new List<string>());
var instances = await _registerInstanceRepository.GetAll();
var oldRegistrations = instances.Where(IsOrphanInstance).ToList();

View File

@ -34,8 +34,9 @@ public class RegisterInstanceWorkerService<T> : BackgroundService where T : IHos
private readonly IServiceProvider _serviceProvider;
private readonly int _intervalCheckRegisterInstanceInSeconds;
public static readonly string InstanceId =
$"{typeof(T).GetFormattedName()}_{DateTime.UtcNow.Ticks}";
$"{typeof(T).GetFormattedName()}_{DateTime.UtcNow.Ticks}";
private readonly bool _isSingletoneMode;
public RegisterInstanceWorkerService(
ILogger<RegisterInstanceWorkerService<T>> logger,
IServiceProvider serviceProvider,
@ -51,11 +52,24 @@ public class RegisterInstanceWorkerService<T> : BackgroundService where T : IHos
_intervalCheckRegisterInstanceInSeconds = 1;
}
_intervalCheckRegisterInstanceInSeconds = _intervalCheckRegisterInstanceInSeconds*1000;
if (!bool.TryParse(configuration["core:hosting:singletonMode"], out _isSingletoneMode))
{
_isSingletoneMode = true;
}
_intervalCheckRegisterInstanceInSeconds = _intervalCheckRegisterInstanceInSeconds * 1000;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
if (_isSingletoneMode)
{
_logger.InformationWorkerSingletone();
return;
}
while (!stoppingToken.IsCancellationRequested)
{
try

View File

@ -34,6 +34,9 @@ internal static partial class RegisterInstanceWorkerServiceLogger
[LoggerMessage(Level = LogLevel.Trace, Message = "Worker running at: {time}")]
public static partial void TraceWorkingRunnging(this ILogger logger, DateTimeOffset time);
[LoggerMessage(Level = LogLevel.Information, Message = "Instance Worker running in singletone mode")]
public static partial void InformationWorkerSingletone(this ILogger logger);
[LoggerMessage(Level = LogLevel.Information, Message = "UnRegister Instance {instanceName} running at: {time}.")]
public static partial void InformationUnRegister(this ILogger logger, string instanceName, DateTimeOffset time);

View File

@ -36,9 +36,10 @@
"search-by-content": false,
"hosting": {
"intervalCheckRegisterInstanceInSeconds": "1",
"timeUntilUnregisterInSeconds": "15"
"timeUntilUnregisterInSeconds": "15",
"singletonMode": true
},
"themelimit": "9",
"themelimit": "9",
"oidc": {
"authority" : ""
}