some changes
This commit is contained in:
parent
4ec9720541
commit
b47bac67ca
37 changed files with 397 additions and 190 deletions
|
@ -4,5 +4,5 @@ namespace Femto.Common.Infrastructure.Outbox;
|
|||
|
||||
public interface IOutboxMessageHandler
|
||||
{
|
||||
Task Publish<TNotification>(TNotification notification, CancellationToken executionContextCancellationToken);
|
||||
Task HandleMessage<TNotification>(TNotification notification, CancellationToken cancellationToken = default);
|
||||
}
|
|
@ -13,7 +13,7 @@ public class Outbox<TContext>(TContext context, IOutboxMessageMapping mapping) w
|
|||
TMessage message,
|
||||
CancellationToken cancellationToken
|
||||
)
|
||||
where TMessage : IIntegrationEvent
|
||||
where TMessage : IEvent
|
||||
{
|
||||
var eventName = mapping.GetEventName(typeof(TMessage));
|
||||
if (eventName is null)
|
||||
|
|
|
@ -3,7 +3,7 @@ namespace Femto.Common.Infrastructure.Outbox;
|
|||
public class OutboxEntry
|
||||
{
|
||||
private const int MaxRetries = 5;
|
||||
|
||||
|
||||
public Guid Id { get; private set; }
|
||||
|
||||
public string EventType { get; private set; } = null!;
|
||||
|
@ -18,7 +18,7 @@ public class OutboxEntry
|
|||
public int RetryCount { get; private set; } = 0;
|
||||
public string? LastError { get; private set; }
|
||||
public OutboxEntryStatus Status { get; private set; }
|
||||
|
||||
|
||||
private OutboxEntry() { }
|
||||
|
||||
public OutboxEntry(Guid eventId, Guid aggregateId, string eventType, string payload)
|
||||
|
@ -35,7 +35,7 @@ public class OutboxEntry
|
|||
this.ProcessedAt = DateTime.UtcNow;
|
||||
this.Status = OutboxEntryStatus.Completed;
|
||||
}
|
||||
|
||||
|
||||
public void Fail(string error)
|
||||
{
|
||||
if (this.RetryCount >= MaxRetries)
|
||||
|
@ -53,7 +53,7 @@ public class OutboxEntry
|
|||
|
||||
public enum OutboxEntryStatus
|
||||
{
|
||||
Pending,
|
||||
Completed,
|
||||
Failed
|
||||
}
|
||||
Pending = 0,
|
||||
Completed = 1,
|
||||
Failed = 2,
|
||||
}
|
||||
|
|
|
@ -56,7 +56,7 @@ public class OutboxProcessor<TContext>(
|
|||
message.AggregateId
|
||||
);
|
||||
|
||||
await handler.Publish(notification, executionContext.CancellationToken);
|
||||
await handler.HandleMessage(notification, executionContext.CancellationToken);
|
||||
|
||||
message.Succeed();
|
||||
}
|
||||
|
|
|
@ -9,21 +9,23 @@ namespace Femto.Common.Infrastructure.Outbox;
|
|||
|
||||
public static class OutboxServiceExtension
|
||||
{
|
||||
public static void AddOutbox<TContext>(
|
||||
public static void AddOutbox<TContext, TMessageHandler>(
|
||||
this IServiceCollection services,
|
||||
Func<IServiceProvider, TContext>? contextFactory = null
|
||||
)
|
||||
where TContext : DbContext, IOutboxContext
|
||||
where TMessageHandler : class, IOutboxMessageHandler
|
||||
{
|
||||
|
||||
services.AddSingleton<IOutboxMessageMapping, ClrTypenameMessageMapping>();
|
||||
|
||||
|
||||
services.AddScoped<IOutboxContext>(c =>
|
||||
contextFactory?.Invoke(c) ?? c.GetRequiredService<TContext>()
|
||||
);
|
||||
|
||||
services.AddScoped<Outbox<TContext>>();
|
||||
|
||||
services.AddScoped<IOutboxMessageHandler, TMessageHandler>();
|
||||
|
||||
services.AddQuartz(q =>
|
||||
{
|
||||
var jobKey = JobKey.Create(nameof(OutboxProcessor<TContext>));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue