Skip to content

Commit 89468e3

Browse files
committed
Changed the InboxCleanupService and OutboxDeliveryService registrations and configuration order to work properly
1 parent 05a729c commit 89468e3

9 files changed

Lines changed: 82 additions & 50 deletions

File tree

src/MassTransit/Configuration/DependencyInjection/InboxCleanupServiceOptions.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,11 @@ public class InboxCleanupServiceOptions
2525
/// </summary>
2626
public TimeSpan QueryDelay { get; set; } = TimeSpan.FromSeconds(10);
2727
}
28+
29+
30+
public class InboxCleanupServiceOptions<T> :
31+
InboxCleanupServiceOptions
32+
where T : class
33+
{
34+
}
2835
}

src/Persistence/MassTransit.EntityFrameworkCoreIntegration/Configuration/Configuration/EntityFrameworkBusOutboxConfigurator.cs

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,14 @@ public class EntityFrameworkBusOutboxConfigurator<TDbContext> :
1515
{
1616
readonly IBusRegistrationConfigurator _configurator;
1717
readonly EntityFrameworkOutboxConfigurator<TDbContext> _outboxConfigurator;
18+
bool _registerOutboxDeliveryService;
1819

1920
public EntityFrameworkBusOutboxConfigurator(IBusRegistrationConfigurator configurator, EntityFrameworkOutboxConfigurator<TDbContext> outboxConfigurator)
2021
{
2122
_outboxConfigurator = outboxConfigurator;
2223
_configurator = configurator;
24+
25+
_registerOutboxDeliveryService = true;
2326
}
2427

2528
/// <summary>
@@ -34,26 +37,29 @@ public EntityFrameworkBusOutboxConfigurator(IBusRegistrationConfigurator configu
3437

3538
public void DisableDeliveryService()
3639
{
37-
_configurator.RemoveHostedService<BusOutboxDeliveryService<TDbContext>>();
40+
_registerOutboxDeliveryService = false;
3841
}
3942

4043
public virtual void Configure(Action<IEntityFrameworkBusOutboxConfigurator>? configure)
4144
{
42-
_configurator.AddHostedService<BusOutboxDeliveryService<TDbContext>>();
45+
configure?.Invoke(this);
46+
4347
_configurator.ReplaceScoped<IScopedBusContextProvider<IBus>, EntityFrameworkScopedBusContextProvider<IBus, TDbContext>>();
4448
_configurator.AddSingleton<IBusOutboxNotification, BusOutboxNotification>();
4549

46-
_configurator.AddOptions<OutboxDeliveryServiceOptions>()
47-
.Configure(options =>
48-
{
49-
options.QueryDelay = _outboxConfigurator.QueryDelay;
50-
options.QueryMessageLimit = _outboxConfigurator.QueryMessageLimit;
51-
options.QueryTimeout = _outboxConfigurator.QueryTimeout;
52-
options.MessageDeliveryLimit = MessageDeliveryLimit;
53-
options.MessageDeliveryTimeout = MessageDeliveryTimeout;
54-
});
55-
56-
configure?.Invoke(this);
50+
if (_registerOutboxDeliveryService)
51+
{
52+
_configurator.AddHostedService<BusOutboxDeliveryService<TDbContext>>();
53+
_configurator.AddOptions<OutboxDeliveryServiceOptions>()
54+
.Configure(options =>
55+
{
56+
options.QueryDelay = _outboxConfigurator.QueryDelay;
57+
options.QueryMessageLimit = _outboxConfigurator.QueryMessageLimit;
58+
options.QueryTimeout = _outboxConfigurator.QueryTimeout;
59+
options.MessageDeliveryLimit = MessageDeliveryLimit;
60+
options.MessageDeliveryTimeout = MessageDeliveryTimeout;
61+
});
62+
}
5763
}
5864
}
5965
}

src/Persistence/MassTransit.EntityFrameworkCoreIntegration/Configuration/Configuration/EntityFrameworkOutboxConfigurator.cs

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,15 @@ public class EntityFrameworkOutboxConfigurator<TDbContext> :
1717
readonly IBusRegistrationConfigurator _configurator;
1818
IsolationLevel _isolationLevel;
1919
ILockStatementProvider _lockStatementProvider;
20+
bool _registerInboxCleanupService;
2021

2122
public EntityFrameworkOutboxConfigurator(IBusRegistrationConfigurator configurator)
2223
{
2324
_configurator = configurator;
2425

2526
_lockStatementProvider = new SqlServerLockStatementProvider();
2627
_isolationLevel = IsolationLevel.RepeatableRead;
28+
_registerInboxCleanupService = true;
2729
}
2830

2931
public TimeSpan DuplicateDetectionWindow { get; set; } = TimeSpan.FromMinutes(30);
@@ -46,7 +48,7 @@ public ILockStatementProvider LockStatementProvider
4648

4749
public void DisableInboxCleanupService()
4850
{
49-
_configurator.RemoveHostedService<InboxCleanupService<TDbContext>>();
51+
_registerInboxCleanupService = false;
5052
}
5153

5254
public virtual void UseBusOutbox(Action<IEntityFrameworkBusOutboxConfigurator>? configure = null)
@@ -58,23 +60,26 @@ public virtual void UseBusOutbox(Action<IEntityFrameworkBusOutboxConfigurator>?
5860

5961
public virtual void Configure(Action<IEntityFrameworkOutboxConfigurator>? configure)
6062
{
63+
configure?.Invoke(this);
64+
6165
_configurator.TryAddScoped<IOutboxContextFactory<TDbContext>, EntityFrameworkOutboxContextFactory<TDbContext>>();
62-
_configurator.AddOptions<EntityFrameworkOutboxOptions>().Configure(options =>
66+
_configurator.AddOptions<EntityFrameworkOutboxOptions<TDbContext>>().Configure(options =>
6367
{
6468
options.IsolationLevel = _isolationLevel;
6569
options.LockStatementProvider = _lockStatementProvider;
6670
});
6771

68-
_configurator.AddHostedService<InboxCleanupService<TDbContext>>();
69-
_configurator.AddOptions<InboxCleanupServiceOptions>().Configure(options =>
72+
if (_registerInboxCleanupService)
7073
{
71-
options.DuplicateDetectionWindow = DuplicateDetectionWindow;
72-
options.QueryMessageLimit = QueryMessageLimit;
73-
options.QueryDelay = QueryDelay;
74-
options.QueryTimeout = QueryTimeout;
75-
});
76-
77-
configure?.Invoke(this);
74+
_configurator.AddHostedService<InboxCleanupService<TDbContext>>();
75+
_configurator.AddOptions<InboxCleanupServiceOptions<TDbContext>>().Configure(options =>
76+
{
77+
options.DuplicateDetectionWindow = DuplicateDetectionWindow;
78+
options.QueryMessageLimit = QueryMessageLimit;
79+
options.QueryDelay = QueryDelay;
80+
options.QueryTimeout = QueryTimeout;
81+
});
82+
}
7883
}
7984
}
8085
}

src/Persistence/MassTransit.EntityFrameworkCoreIntegration/EntityFrameworkCoreIntegration/BusOutboxDeliveryService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public class BusOutboxDeliveryService<TDbContext> :
3838
string _getOutboxIdStatement;
3939

4040
public BusOutboxDeliveryService(IBusControl busControl, IOptions<OutboxDeliveryServiceOptions> options,
41-
IOptions<EntityFrameworkOutboxOptions> outboxOptions, IBusOutboxNotification notification,
41+
IOptions<EntityFrameworkOutboxOptions<TDbContext>> outboxOptions, IBusOutboxNotification notification,
4242
ILogger<BusOutboxDeliveryService<TDbContext>> logger, IServiceProvider provider)
4343
{
4444
_busControl = busControl;

src/Persistence/MassTransit.EntityFrameworkCoreIntegration/EntityFrameworkCoreIntegration/EntityFrameworkOutboxContextFactory.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public class EntityFrameworkOutboxContextFactory<TDbContext> :
2222
readonly IServiceProvider _provider;
2323
string _lockStatement;
2424

25-
public EntityFrameworkOutboxContextFactory(TDbContext dbContext, IServiceProvider provider, IOptions<EntityFrameworkOutboxOptions> options)
25+
public EntityFrameworkOutboxContextFactory(TDbContext dbContext, IServiceProvider provider, IOptions<EntityFrameworkOutboxOptions<TDbContext>> options)
2626
{
2727
_dbContext = dbContext;
2828
_provider = provider;

src/Persistence/MassTransit.EntityFrameworkCoreIntegration/EntityFrameworkCoreIntegration/InboxCleanupService.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,11 @@ public class InboxCleanupService<TDbContext> :
2222
where TDbContext : DbContext
2323
{
2424
readonly ILogger<InboxCleanupService<TDbContext>> _logger;
25-
readonly InboxCleanupServiceOptions _options;
25+
readonly InboxCleanupServiceOptions<TDbContext> _options;
2626
readonly IServiceProvider _provider;
2727
readonly IRetryPolicy _retryPolicy;
2828

29-
public InboxCleanupService(IOptions<InboxCleanupServiceOptions> options, ILogger<InboxCleanupService<TDbContext>> logger,
29+
public InboxCleanupService(IOptions<InboxCleanupServiceOptions<TDbContext>> options, ILogger<InboxCleanupService<TDbContext>> logger,
3030
IServiceProvider provider)
3131
{
3232
_options = options.Value;

src/Persistence/MassTransit.EntityFrameworkCoreIntegration/EntityFrameworkOutboxOptions.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@ namespace MassTransit
22
{
33
using System.Data;
44
using EntityFrameworkCoreIntegration;
5+
using Microsoft.EntityFrameworkCore;
56

67

7-
public class EntityFrameworkOutboxOptions
8+
public class EntityFrameworkOutboxOptions<TDbContext>
9+
where TDbContext : DbContext
810
{
911
public IsolationLevel IsolationLevel { get; set; } = IsolationLevel.RepeatableRead;
1012
public ILockStatementProvider LockStatementProvider { get; set; } = new SqlServerLockStatementProvider();

src/Persistence/MassTransit.MongoDbIntegration/Configuration/Configuration/MongoDbBusOutboxConfigurator.cs

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,14 @@ public class MongoDbBusOutboxConfigurator :
1313
{
1414
readonly IBusRegistrationConfigurator _configurator;
1515
readonly MongoDbOutboxConfigurator _outboxConfigurator;
16+
bool _registerOutboxDeliveryService;
1617

1718
public MongoDbBusOutboxConfigurator(IBusRegistrationConfigurator configurator, MongoDbOutboxConfigurator outboxConfigurator)
1819
{
1920
_outboxConfigurator = outboxConfigurator;
2021
_configurator = configurator;
22+
23+
_registerOutboxDeliveryService = true;
2124
}
2225

2326
/// <summary>
@@ -32,26 +35,29 @@ public MongoDbBusOutboxConfigurator(IBusRegistrationConfigurator configurator, M
3235

3336
public void DisableDeliveryService()
3437
{
35-
_configurator.RemoveHostedService<BusOutboxDeliveryService>();
38+
_registerOutboxDeliveryService = false;
3639
}
3740

3841
public virtual void Configure(Action<IMongoDbBusOutboxConfigurator>? configure)
3942
{
40-
_configurator.AddHostedService<BusOutboxDeliveryService>();
43+
configure?.Invoke(this);
44+
4145
_configurator.ReplaceScoped<IScopedBusContextProvider<IBus>, MongoDbScopedBusContextProvider<IBus>>();
4246
_configurator.AddSingleton<IBusOutboxNotification, BusOutboxNotification>();
4347

44-
_configurator.AddOptions<OutboxDeliveryServiceOptions>()
45-
.Configure(options =>
46-
{
47-
options.QueryDelay = _outboxConfigurator.QueryDelay;
48-
options.QueryMessageLimit = _outboxConfigurator.QueryMessageLimit;
49-
options.QueryTimeout = _outboxConfigurator.QueryTimeout;
50-
options.MessageDeliveryLimit = MessageDeliveryLimit;
51-
options.MessageDeliveryTimeout = MessageDeliveryTimeout;
52-
});
53-
54-
configure?.Invoke(this);
48+
if (_registerOutboxDeliveryService)
49+
{
50+
_configurator.AddHostedService<BusOutboxDeliveryService>();
51+
_configurator.AddOptions<OutboxDeliveryServiceOptions>()
52+
.Configure(options =>
53+
{
54+
options.QueryDelay = _outboxConfigurator.QueryDelay;
55+
options.QueryMessageLimit = _outboxConfigurator.QueryMessageLimit;
56+
options.QueryTimeout = _outboxConfigurator.QueryTimeout;
57+
options.MessageDeliveryLimit = MessageDeliveryLimit;
58+
options.MessageDeliveryTimeout = MessageDeliveryTimeout;
59+
});
60+
}
5561
}
5662
}
5763
}

src/Persistence/MassTransit.MongoDbIntegration/Configuration/Configuration/MongoDbOutboxConfigurator.cs

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,13 @@ public class MongoDbOutboxConfigurator :
1616
IMongoDbOutboxConfigurator
1717
{
1818
readonly IBusRegistrationConfigurator _configurator;
19+
bool _registerInboxCleanupService;
1920

2021
public MongoDbOutboxConfigurator(IBusRegistrationConfigurator configurator)
2122
{
2223
_configurator = configurator;
24+
25+
_registerInboxCleanupService = true;
2326
}
2427

2528
public TimeSpan DuplicateDetectionWindow { get; set; } = TimeSpan.FromMinutes(30);
@@ -32,7 +35,7 @@ public MongoDbOutboxConfigurator(IBusRegistrationConfigurator configurator)
3235

3336
public void DisableInboxCleanupService()
3437
{
35-
_configurator.RemoveHostedService<InboxCleanupService>();
38+
_registerInboxCleanupService = false;
3639
}
3740

3841
public virtual void UseBusOutbox(Action<IMongoDbBusOutboxConfigurator>? configure = null)
@@ -51,14 +54,17 @@ public virtual void Configure(Action<IMongoDbOutboxConfigurator>? configure)
5154

5255
_configurator.TryAddScoped<IOutboxContextFactory<MongoDbContext>, MongoDbOutboxContextFactory>();
5356

54-
_configurator.AddHostedService<InboxCleanupService>();
55-
_configurator.AddOptions<InboxCleanupServiceOptions>().Configure(options =>
57+
if (_registerInboxCleanupService)
5658
{
57-
options.DuplicateDetectionWindow = DuplicateDetectionWindow;
58-
options.QueryMessageLimit = QueryMessageLimit;
59-
options.QueryDelay = QueryDelay;
60-
options.QueryTimeout = QueryTimeout;
61-
});
59+
_configurator.AddHostedService<InboxCleanupService>();
60+
_configurator.AddOptions<InboxCleanupServiceOptions>().Configure(options =>
61+
{
62+
options.DuplicateDetectionWindow = DuplicateDetectionWindow;
63+
options.QueryMessageLimit = QueryMessageLimit;
64+
options.QueryDelay = QueryDelay;
65+
options.QueryTimeout = QueryTimeout;
66+
});
67+
}
6268

6369
RegisterClassMaps();
6470

0 commit comments

Comments
 (0)