|
|
|
@ -28,6 +28,8 @@ namespace Volo.Abp.EventBus.Boxes |
|
|
|
|
|
|
|
protected string DistributedLockName => "Inbox_" + InboxConfig.Name; |
|
|
|
public ILogger<InboxProcessor> Logger { get; set; } |
|
|
|
protected CancellationTokenSource StoppingTokenSource { get; } |
|
|
|
protected CancellationToken StoppingToken { get; } |
|
|
|
|
|
|
|
public InboxProcessor( |
|
|
|
IServiceProvider serviceProvider, |
|
|
|
@ -46,6 +48,8 @@ namespace Volo.Abp.EventBus.Boxes |
|
|
|
Timer.Period = 2000; //TODO: Config?
|
|
|
|
Timer.Elapsed += TimerOnElapsed; |
|
|
|
Logger = NullLogger<InboxProcessor>.Instance; |
|
|
|
StoppingTokenSource = new CancellationTokenSource(); |
|
|
|
StoppingToken = StoppingTokenSource.Token; |
|
|
|
} |
|
|
|
|
|
|
|
private async Task TimerOnElapsed(AbpAsyncTimer arg) |
|
|
|
@ -63,13 +67,20 @@ namespace Volo.Abp.EventBus.Boxes |
|
|
|
|
|
|
|
public Task StopAsync(CancellationToken cancellationToken = default) |
|
|
|
{ |
|
|
|
StoppingTokenSource.Cancel(); |
|
|
|
Timer.Stop(cancellationToken); |
|
|
|
StoppingTokenSource.Dispose(); |
|
|
|
return Task.CompletedTask; |
|
|
|
} |
|
|
|
|
|
|
|
protected virtual async Task RunAsync() |
|
|
|
{ |
|
|
|
await using (var handle = await DistributedLockProvider.TryAcquireLockAsync(DistributedLockName)) |
|
|
|
if (StoppingToken.IsCancellationRequested) |
|
|
|
{ |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
await using (var handle = await DistributedLockProvider.TryAcquireLockAsync(DistributedLockName, cancellationToken: StoppingToken)) |
|
|
|
{ |
|
|
|
if (handle != null) |
|
|
|
{ |
|
|
|
@ -79,7 +90,7 @@ namespace Volo.Abp.EventBus.Boxes |
|
|
|
|
|
|
|
while (true) |
|
|
|
{ |
|
|
|
var waitingEvents = await Inbox.GetWaitingEventsAsync(1000); //TODO: Config?
|
|
|
|
var waitingEvents = await Inbox.GetWaitingEventsAsync(1000); //TODO: Config? Pass StoppingToken!
|
|
|
|
if (waitingEvents.Count <= 0) |
|
|
|
{ |
|
|
|
break; |
|
|
|
@ -107,7 +118,7 @@ namespace Volo.Abp.EventBus.Boxes |
|
|
|
else |
|
|
|
{ |
|
|
|
Logger.LogDebug("Could not obtain the distributed lock: " + DistributedLockName); |
|
|
|
await Task.Delay(7000); //TODO: Can we pass a cancellation token to cancel on shutdown? (Config?)
|
|
|
|
await TaskDelayHelper.DelayAsync(15000, StoppingToken); //TODO: Config?
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|