Skip to content

Commit 7fbc4f1

Browse files
committed
Outbox
1 parent e9cac86 commit 7fbc4f1

File tree

22 files changed

+161
-119
lines changed

22 files changed

+161
-119
lines changed

src/ModularMonolith/ClassifiedAds.Domain/Infrastructure/Messaging/IMessageBus.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ Task ReceiveAsync<TConsumer, T>(Func<T, MetaData, CancellationToken, Task> actio
1515
Task ReceiveAsync<TConsumer, T>(CancellationToken cancellationToken = default)
1616
where T : IMessageBusMessage;
1717

18-
Task SendAsync(PublishingOutBoxEvent outbox, CancellationToken cancellationToken = default);
18+
Task SendAsync(PublishingOutboxMessage outbox, CancellationToken cancellationToken = default);
1919
}
2020

2121
public interface IMessageBusMessage

src/ModularMonolith/ClassifiedAds.Domain/Infrastructure/Messaging/IOutBoxEventPublisher.cs renamed to src/ModularMonolith/ClassifiedAds.Domain/Infrastructure/Messaging/IOutBoxMessagePublisher.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,16 @@
33

44
namespace ClassifiedAds.Domain.Infrastructure.Messaging;
55

6-
public interface IOutBoxEventPublisher
6+
public interface IOutboxMessagePublisher
77
{
88
static abstract string[] CanHandleEventTypes();
99

1010
static abstract string CanHandleEventSource();
1111

12-
Task HandleAsync(PublishingOutBoxEvent outbox, CancellationToken cancellationToken = default);
12+
Task HandleAsync(PublishingOutboxMessage outbox, CancellationToken cancellationToken = default);
1313
}
1414

15-
public class PublishingOutBoxEvent
15+
public class PublishingOutboxMessage
1616
{
1717
public string Id { get; set; }
1818

src/ModularMonolith/ClassifiedAds.Domain/Infrastructure/Messaging/MessageBus.cs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public class MessageBus : IMessageBus
1616
{
1717
private readonly IServiceProvider _serviceProvider;
1818
private static List<Type> _consumers = new List<Type>();
19-
private static Dictionary<string, List<Type>> _outboxEventHandlers = new();
19+
private static Dictionary<string, List<Type>> _outboxMessageHandlers = new();
2020

2121
internal static void AddConsumers(Assembly assembly, IServiceCollection services)
2222
{
@@ -32,10 +32,10 @@ internal static void AddConsumers(Assembly assembly, IServiceCollection services
3232
_consumers.AddRange(types);
3333
}
3434

35-
internal static void AddOutboxEventPublishers(Assembly assembly, IServiceCollection services)
35+
internal static void AddOutboxMessagePublishers(Assembly assembly, IServiceCollection services)
3636
{
3737
var types = assembly.GetTypes()
38-
.Where(x => x.GetInterfaces().Any(y => y == typeof(IOutBoxEventPublisher)))
38+
.Where(x => x.GetInterfaces().Any(y => y == typeof(IOutboxMessagePublisher)))
3939
.ToList();
4040

4141
foreach (var type in types)
@@ -45,18 +45,18 @@ internal static void AddOutboxEventPublishers(Assembly assembly, IServiceCollect
4545

4646
foreach (var item in types)
4747
{
48-
var canHandlerEventTypes = (string[])item.InvokeMember(nameof(IOutBoxEventPublisher.CanHandleEventTypes), BindingFlags.InvokeMethod, null, null, null, CultureInfo.CurrentCulture);
49-
var eventSource = (string)item.InvokeMember(nameof(IOutBoxEventPublisher.CanHandleEventSource), BindingFlags.InvokeMethod, null, null, null, CultureInfo.CurrentCulture);
48+
var canHandlerEventTypes = (string[])item.InvokeMember(nameof(IOutboxMessagePublisher.CanHandleEventTypes), BindingFlags.InvokeMethod, null, null, null, CultureInfo.CurrentCulture);
49+
var eventSource = (string)item.InvokeMember(nameof(IOutboxMessagePublisher.CanHandleEventSource), BindingFlags.InvokeMethod, null, null, null, CultureInfo.CurrentCulture);
5050

5151
foreach (var eventType in canHandlerEventTypes)
5252
{
5353
var key = eventSource + ":" + eventType;
54-
if (!_outboxEventHandlers.ContainsKey(key))
54+
if (!_outboxMessageHandlers.ContainsKey(key))
5555
{
56-
_outboxEventHandlers[key] = new List<Type>();
56+
_outboxMessageHandlers[key] = new List<Type>();
5757
}
5858

59-
_outboxEventHandlers[key].Add(item);
59+
_outboxMessageHandlers[key].Add(item);
6060
}
6161
}
6262
}
@@ -111,10 +111,10 @@ await _serviceProvider.GetRequiredService<IMessageReceiver<TConsumer, T>>().Rece
111111
}, cancellationToken);
112112
}
113113

114-
public async Task SendAsync(PublishingOutBoxEvent outbox, CancellationToken cancellationToken = default)
114+
public async Task SendAsync(PublishingOutboxMessage outbox, CancellationToken cancellationToken = default)
115115
{
116116
var key = outbox.EventSource + ":" + outbox.EventType;
117-
var handlerTypes = _outboxEventHandlers.TryGetValue(key, out var value) ? value : null;
117+
var handlerTypes = _outboxMessageHandlers.TryGetValue(key, out var value) ? value : null;
118118

119119
if (handlerTypes == null)
120120
{
@@ -137,15 +137,15 @@ public static void AddMessageBusConsumers(this IServiceCollection services, Asse
137137
MessageBus.AddConsumers(assembly, services);
138138
}
139139

140-
public static void AddOutboxEventPublishers(this IServiceCollection services, Assembly assembly)
140+
public static void AddOutboxMessagePublishers(this IServiceCollection services, Assembly assembly)
141141
{
142-
MessageBus.AddOutboxEventPublishers(assembly, services);
142+
MessageBus.AddOutboxMessagePublishers(assembly, services);
143143
}
144144

145145
public static void AddMessageBus(this IServiceCollection services, Assembly assembly)
146146
{
147147
services.AddTransient<IMessageBus, MessageBus>();
148148
services.AddMessageBusConsumers(assembly);
149-
services.AddOutboxEventPublishers(assembly);
149+
services.AddOutboxMessagePublishers(assembly);
150150
}
151151
}

src/ModularMonolith/ClassifiedAds.Modules.Product/Commands/PublishEventsCommand.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,31 +20,31 @@ public class PublishEventsCommandHandler : ICommandHandler<PublishEventsCommand>
2020
{
2121
private readonly ILogger<PublishEventsCommandHandler> _logger;
2222
private readonly IDateTimeProvider _dateTimeProvider;
23-
private readonly IRepository<OutboxEvent, Guid> _outboxEventRepository;
23+
private readonly IRepository<OutboxMessage, Guid> _outboxMessageRepository;
2424
private readonly IMessageBus _messageBus;
2525

2626
public PublishEventsCommandHandler(ILogger<PublishEventsCommandHandler> logger,
2727
IDateTimeProvider dateTimeProvider,
28-
IRepository<OutboxEvent, Guid> outboxEventRepository,
28+
IRepository<OutboxMessage, Guid> outboxMessageRepository,
2929
IMessageBus messageBus)
3030
{
3131
_logger = logger;
3232
_dateTimeProvider = dateTimeProvider;
33-
_outboxEventRepository = outboxEventRepository;
33+
_outboxMessageRepository = outboxMessageRepository;
3434
_messageBus = messageBus;
3535
}
3636

3737
public async Task HandleAsync(PublishEventsCommand command, CancellationToken cancellationToken = default)
3838
{
39-
var events = _outboxEventRepository.GetQueryableSet()
39+
var events = _outboxMessageRepository.GetQueryableSet()
4040
.Where(x => !x.Published)
4141
.OrderBy(x => x.CreatedDateTime)
4242
.Take(50)
4343
.ToList();
4444

4545
foreach (var eventLog in events)
4646
{
47-
var outbox = new PublishingOutBoxEvent
47+
var outbox = new PublishingOutboxMessage
4848
{
4949
Id = eventLog.Id.ToString(),
5050
EventType = eventLog.EventType,
@@ -57,7 +57,7 @@ public async Task HandleAsync(PublishEventsCommand command, CancellationToken ca
5757

5858
eventLog.Published = true;
5959
eventLog.UpdatedDateTime = _dateTimeProvider.OffsetNow;
60-
await _outboxEventRepository.UnitOfWork.SaveChangesAsync(cancellationToken);
60+
await _outboxMessageRepository.UnitOfWork.SaveChangesAsync(cancellationToken);
6161
}
6262

6363
command.SentEventsCount = events.Count;

src/ModularMonolith/ClassifiedAds.Modules.Product/Entities/OutboxEvent.cs renamed to src/ModularMonolith/ClassifiedAds.Modules.Product/Entities/OutboxMessage.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@
33

44
namespace ClassifiedAds.Modules.Product.Entities;
55

6-
public class OutboxEvent : OutboxEventBase, IAggregateRoot
6+
public class OutboxMessage : OutboxMessageBase, IAggregateRoot
77
{
88
}
99

10-
public class ArchivedOutboxEvent : OutboxEventBase, IAggregateRoot
10+
public class ArchivedOutboxMessage : OutboxMessageBase, IAggregateRoot
1111
{
1212
}
1313

14-
public abstract class OutboxEventBase : Entity<Guid>
14+
public abstract class OutboxMessageBase : Entity<Guid>
1515
{
1616
public string EventType { get; set; }
1717

src/ModularMonolith/ClassifiedAds.Modules.Product/EventHandlers/ProductCreatedEventHandler.cs

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
using ClassifiedAds.Modules.Product.Constants;
66
using ClassifiedAds.Modules.Product.Entities;
77
using System;
8-
using System.Diagnostics;
98
using System.Threading;
109
using System.Threading.Tasks;
1110

@@ -15,15 +14,15 @@ public class ProductCreatedEventHandler : IDomainEventHandler<EntityCreatedEvent
1514
{
1615
private readonly ICurrentUser _currentUser;
1716
private readonly IRepository<AuditLogEntry, Guid> _auditLogRepository;
18-
private readonly IRepository<OutboxEvent, Guid> _outboxEventRepository;
17+
private readonly IRepository<OutboxMessage, Guid> _outboxMessageRepository;
1918

2019
public ProductCreatedEventHandler(ICurrentUser currentUser,
2120
IRepository<AuditLogEntry, Guid> auditLogRepository,
22-
IRepository<OutboxEvent, Guid> outboxEventRepository)
21+
IRepository<OutboxMessage, Guid> outboxMessageRepository)
2322
{
2423
_currentUser = currentUser;
2524
_auditLogRepository = auditLogRepository;
26-
_outboxEventRepository = outboxEventRepository;
25+
_outboxMessageRepository = outboxMessageRepository;
2726
}
2827

2928
public async Task HandleAsync(EntityCreatedEvent<Entities.Product> domainEvent, CancellationToken cancellationToken = default)
@@ -40,26 +39,24 @@ public async Task HandleAsync(EntityCreatedEvent<Entities.Product> domainEvent,
4039
await _auditLogRepository.AddOrUpdateAsync(auditLog, cancellationToken);
4140
await _auditLogRepository.UnitOfWork.SaveChangesAsync(cancellationToken);
4241

43-
await _outboxEventRepository.AddOrUpdateAsync(new OutboxEvent
42+
await _outboxMessageRepository.AddOrUpdateAsync(new OutboxMessage
4443
{
4544
EventType = EventTypeConstants.AuditLogEntryCreated,
4645
TriggeredById = _currentUser.UserId,
4746
CreatedDateTime = auditLog.CreatedDateTime,
4847
ObjectId = auditLog.Id.ToString(),
4948
Payload = auditLog.AsJsonString(),
50-
ActivityId = Activity.Current.Id,
5149
}, cancellationToken);
5250

53-
await _outboxEventRepository.AddOrUpdateAsync(new OutboxEvent
51+
await _outboxMessageRepository.AddOrUpdateAsync(new OutboxMessage
5452
{
5553
EventType = EventTypeConstants.ProductCreated,
5654
TriggeredById = _currentUser.UserId,
5755
CreatedDateTime = domainEvent.EventDateTime,
5856
ObjectId = domainEvent.Entity.Id.ToString(),
5957
Payload = domainEvent.Entity.AsJsonString(),
60-
ActivityId = Activity.Current.Id,
6158
}, cancellationToken);
6259

63-
await _outboxEventRepository.UnitOfWork.SaveChangesAsync(cancellationToken);
60+
await _outboxMessageRepository.UnitOfWork.SaveChangesAsync(cancellationToken);
6461
}
6562
}

src/ModularMonolith/ClassifiedAds.Modules.Product/EventHandlers/ProductDeletedEventHandler.cs

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
using ClassifiedAds.Modules.Product.Constants;
66
using ClassifiedAds.Modules.Product.Entities;
77
using System;
8-
using System.Diagnostics;
98
using System.Threading;
109
using System.Threading.Tasks;
1110

@@ -15,15 +14,15 @@ public class ProductDeletedEventHandler : IDomainEventHandler<EntityDeletedEvent
1514
{
1615
private readonly ICurrentUser _currentUser;
1716
private readonly IRepository<AuditLogEntry, Guid> _auditLogRepository;
18-
private readonly IRepository<OutboxEvent, Guid> _outboxEventRepository;
17+
private readonly IRepository<OutboxMessage, Guid> _outboxMessageRepository;
1918

2019
public ProductDeletedEventHandler(ICurrentUser currentUser,
2120
IRepository<AuditLogEntry, Guid> auditLogRepository,
22-
IRepository<OutboxEvent, Guid> outboxEventRepository)
21+
IRepository<OutboxMessage, Guid> outboxMessageRepository)
2322
{
2423
_currentUser = currentUser;
2524
_auditLogRepository = auditLogRepository;
26-
_outboxEventRepository = outboxEventRepository;
25+
_outboxMessageRepository = outboxMessageRepository;
2726
}
2827

2928
public async Task HandleAsync(EntityDeletedEvent<Entities.Product> domainEvent, CancellationToken cancellationToken = default)
@@ -40,26 +39,24 @@ public async Task HandleAsync(EntityDeletedEvent<Entities.Product> domainEvent,
4039
await _auditLogRepository.AddOrUpdateAsync(auditLog, cancellationToken);
4140
await _auditLogRepository.UnitOfWork.SaveChangesAsync(cancellationToken);
4241

43-
await _outboxEventRepository.AddOrUpdateAsync(new OutboxEvent
42+
await _outboxMessageRepository.AddOrUpdateAsync(new OutboxMessage
4443
{
4544
EventType = EventTypeConstants.AuditLogEntryCreated,
4645
TriggeredById = _currentUser.UserId,
4746
CreatedDateTime = auditLog.CreatedDateTime,
4847
ObjectId = auditLog.Id.ToString(),
4948
Payload = auditLog.AsJsonString(),
50-
ActivityId = Activity.Current.Id,
5149
}, cancellationToken);
5250

53-
await _outboxEventRepository.AddOrUpdateAsync(new OutboxEvent
51+
await _outboxMessageRepository.AddOrUpdateAsync(new OutboxMessage
5452
{
5553
EventType = EventTypeConstants.ProductDeleted,
5654
TriggeredById = _currentUser.UserId,
5755
CreatedDateTime = domainEvent.EventDateTime,
5856
ObjectId = domainEvent.Entity.Id.ToString(),
5957
Payload = domainEvent.Entity.AsJsonString(),
60-
ActivityId = Activity.Current.Id,
6158
}, cancellationToken);
6259

63-
await _outboxEventRepository.UnitOfWork.SaveChangesAsync(cancellationToken);
60+
await _outboxMessageRepository.UnitOfWork.SaveChangesAsync(cancellationToken);
6461
}
6562
}

src/ModularMonolith/ClassifiedAds.Modules.Product/EventHandlers/ProductUpdatedEventHandler.cs

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
using ClassifiedAds.Modules.Product.Constants;
66
using ClassifiedAds.Modules.Product.Entities;
77
using System;
8-
using System.Diagnostics;
98
using System.Threading;
109
using System.Threading.Tasks;
1110

@@ -15,15 +14,15 @@ public class ProductUpdatedEventHandler : IDomainEventHandler<EntityUpdatedEvent
1514
{
1615
private readonly ICurrentUser _currentUser;
1716
private readonly IRepository<AuditLogEntry, Guid> _auditLogRepository;
18-
private readonly IRepository<OutboxEvent, Guid> _outboxEventRepository;
17+
private readonly IRepository<OutboxMessage, Guid> _outboxMessageRepository;
1918

2019
public ProductUpdatedEventHandler(ICurrentUser currentUser,
2120
IRepository<AuditLogEntry, Guid> auditLogRepository,
22-
IRepository<OutboxEvent, Guid> outboxEventRepository)
21+
IRepository<OutboxMessage, Guid> outboxMessageRepository)
2322
{
2423
_currentUser = currentUser;
2524
_auditLogRepository = auditLogRepository;
26-
_outboxEventRepository = outboxEventRepository;
25+
_outboxMessageRepository = outboxMessageRepository;
2726
}
2827

2928
public async Task HandleAsync(EntityUpdatedEvent<Entities.Product> domainEvent, CancellationToken cancellationToken = default)
@@ -40,26 +39,24 @@ public async Task HandleAsync(EntityUpdatedEvent<Entities.Product> domainEvent,
4039
await _auditLogRepository.AddOrUpdateAsync(auditLog, cancellationToken);
4140
await _auditLogRepository.UnitOfWork.SaveChangesAsync(cancellationToken);
4241

43-
await _outboxEventRepository.AddOrUpdateAsync(new OutboxEvent
42+
await _outboxMessageRepository.AddOrUpdateAsync(new OutboxMessage
4443
{
4544
EventType = EventTypeConstants.AuditLogEntryCreated,
4645
TriggeredById = _currentUser.UserId,
4746
CreatedDateTime = auditLog.CreatedDateTime,
4847
ObjectId = auditLog.Id.ToString(),
4948
Payload = auditLog.AsJsonString(),
50-
ActivityId = Activity.Current.Id,
5149
}, cancellationToken);
5250

53-
await _outboxEventRepository.AddOrUpdateAsync(new OutboxEvent
51+
await _outboxMessageRepository.AddOrUpdateAsync(new OutboxMessage
5452
{
5553
EventType = EventTypeConstants.ProductUpdated,
5654
TriggeredById = _currentUser.UserId,
5755
CreatedDateTime = domainEvent.EventDateTime,
5856
ObjectId = domainEvent.Entity.Id.ToString(),
5957
Payload = domainEvent.Entity.AsJsonString(),
60-
ActivityId = Activity.Current.Id,
6158
}, cancellationToken);
6259

63-
await _outboxEventRepository.UnitOfWork.SaveChangesAsync(cancellationToken);
60+
await _outboxMessageRepository.UnitOfWork.SaveChangesAsync(cancellationToken);
6461
}
6562
}

src/ModularMonolith/ClassifiedAds.Modules.Product/MappingConfigurations/OutboxEventConfiguration.cs renamed to src/ModularMonolith/ClassifiedAds.Modules.Product/MappingConfigurations/OutboxMessageConfiguration.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,22 @@
44

55
namespace ClassifiedAds.Modules.Product.MappingConfigurations;
66

7-
public class OutboxEventConfiguration : IEntityTypeConfiguration<OutboxEvent>
7+
public class OutboxMessageConfiguration : IEntityTypeConfiguration<OutboxMessage>
88
{
9-
public void Configure(EntityTypeBuilder<OutboxEvent> builder)
9+
public void Configure(EntityTypeBuilder<OutboxMessage> builder)
1010
{
11-
builder.ToTable("OutboxEvents");
11+
builder.ToTable("OutboxMessages");
1212
builder.Property(x => x.Id).HasDefaultValueSql("newsequentialid()");
1313
builder.HasIndex(x => new { x.Published, x.CreatedDateTime });
1414
builder.HasIndex(x => x.CreatedDateTime);
1515
}
1616
}
1717

18-
public class ArchivedOutboxEventConfiguration : IEntityTypeConfiguration<ArchivedOutboxEvent>
18+
public class ArchivedOutboxMessageConfiguration : IEntityTypeConfiguration<ArchivedOutboxMessage>
1919
{
20-
public void Configure(EntityTypeBuilder<ArchivedOutboxEvent> builder)
20+
public void Configure(EntityTypeBuilder<ArchivedOutboxMessage> builder)
2121
{
22-
builder.ToTable("ArchivedOutboxEvents");
22+
builder.ToTable("ArchivedOutboxMessages");
2323
builder.HasIndex(x => x.CreatedDateTime);
2424
}
2525
}

0 commit comments

Comments
 (0)