namespace Dpz.Core.Service.Mediator.Common.Behaviors;
/// <summary>
/// Mediator 性能管道:统计消息耗时并标记慢请求。
/// </summary>
/// <typeparam name="TMessage">消息类型。</typeparam>
/// <typeparam name="TResponse">响应类型。</typeparam>
public sealed class MediatorPerformanceBehavior<TMessage, TResponse>(
ILogger<MediatorPerformanceBehavior<TMessage, TResponse>> logger
) : IPipelineBehavior<TMessage, TResponse>
where TMessage : IMessage
{
private const int SlowRequestThresholdMs = 800;
/// <summary>
/// 执行性能统计管道逻辑。
/// </summary>
public async ValueTask<TResponse> Handle(
TMessage message,
MessageHandlerDelegate<TMessage, TResponse> next,
CancellationToken cancellationToken
)
{
var stopwatch = Stopwatch.StartNew();
var response = await next(message, cancellationToken);
stopwatch.Stop();
var elapsedMs = stopwatch.ElapsedMilliseconds;
var messageName = typeof(TMessage).Name;
if (elapsedMs >= SlowRequestThresholdMs)
{
logger.LogWarning(
"[Mediator] Slow message detected: {MessageName}, elapsed={ElapsedMs}ms",
messageName,
elapsedMs
);
return response;
}
// logger.LogInformation(
// "[Mediator] Message cost: {MessageName}, elapsed={ElapsedMs}ms",
// messageName,
// elapsedMs
// );
return response;
}
}
评论加载中...