Skip to content

Commit 587fcf2

Browse files
committed
Create new service scope for each iteration in the outbox processor.
1 parent 9fad895 commit 587fcf2

1 file changed

Lines changed: 20 additions & 16 deletions

File tree

src/OpenDDD/Infrastructure/TransactionalOutbox/OutboxProcessor.cs

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -37,32 +37,36 @@ protected override async Task ExecuteAsync(CancellationToken stoppingToken)
3737
_logger.LogInformation("Waiting for database setup to complete before starting outbox processing...");
3838
await _startupService.StartupCompleted;
3939
_logger.LogInformation("Database setup completed. Starting outbox processing...");
40-
41-
using var scope = _serviceScopeFactory.CreateScope();
42-
var outboxRepository = scope.ServiceProvider.GetRequiredService<IOutboxRepository>();
43-
var messagingProvider = scope.ServiceProvider.GetRequiredService<IMessagingProvider>();
44-
45-
var databaseSession = scope.ServiceProvider.GetService<IDatabaseSession>();
46-
if (databaseSession == null)
47-
{
48-
_logger.LogError("No valid database session found for persistence provider: {PersistenceProvider}", _options.PersistenceProvider);
49-
return;
50-
}
51-
52-
await databaseSession.OpenConnectionAsync(stoppingToken);
53-
40+
5441
while (!stoppingToken.IsCancellationRequested)
5542
{
43+
using var scope = _serviceScopeFactory.CreateScope();
44+
5645
try
5746
{
47+
var outboxRepository = scope.ServiceProvider.GetRequiredService<IOutboxRepository>();
48+
var messagingProvider = scope.ServiceProvider.GetRequiredService<IMessagingProvider>();
49+
var databaseSession = scope.ServiceProvider.GetService<IDatabaseSession>();
50+
51+
if (databaseSession == null)
52+
{
53+
_logger.LogError("No valid database session found for persistence provider: {PersistenceProvider}", _options.PersistenceProvider);
54+
return;
55+
}
56+
57+
await databaseSession.OpenConnectionAsync(stoppingToken);
58+
5859
var pendingEvents = await outboxRepository.GetPendingEventsAsync(stoppingToken);
5960

6061
foreach (var outboxEntry in pendingEvents)
6162
{
6263
try
6364
{
64-
var topic = EventTopicHelper.DetermineTopic(outboxEntry.EventType,
65-
outboxEntry.EventName, _options.Events, _logger);
65+
var topic = EventTopicHelper.DetermineTopic(
66+
outboxEntry.EventType,
67+
outboxEntry.EventName,
68+
_options.Events,
69+
_logger);
6670

6771
_logger.LogDebug("Publishing outbox event {EventId} to topic {Topic}", outboxEntry.Id, topic);
6872

0 commit comments

Comments
 (0)