Middleware
Pipeline
csharp
builder.Services.AddMessaging(options => { ... })
.UseMiddleware<LoggingMiddleware>()
.UseMiddleware<TenantContextMiddleware>()
.UseMiddleware<ValidationMiddleware>();
// Or use the built-in logging middleware
builder.Services.AddMessaging(options => { ... })
.UseLogging();
public class LoggingMiddleware : IMessageMiddleware
{
private readonly ILogger<LoggingMiddleware> _logger;
public LoggingMiddleware(ILogger<LoggingMiddleware> logger) => _logger = logger;
public async ValueTask InvokeAsync(
MessageContext context,
MessageDelegate next,
CancellationToken ct)
{
var sw = Stopwatch.StartNew();
try
{
await next(context, ct);
_logger.LogInformation(
"Processed {MessageId} in {Elapsed}ms",
context.MessageId,
sw.ElapsedMilliseconds);
}
catch (Exception ex)
{
_logger.LogError(ex,
"Failed to process {MessageId} after {Elapsed}ms",
context.MessageId,
sw.ElapsedMilliseconds);
throw;
}
}
}