namespace Dpz.Core.MessageQueue.Models;

/// <summary>
/// Outbox 单轮补发的统计结果。
/// </summary>
public sealed record MessageOutboxRetryResult
{
    /// <summary>
    /// 初始化 Outbox 单轮补发统计结果。
    /// </summary>
    /// <param name="publishRetryCount">本轮尝试补发发布失败消息的数量。</param>
    /// <param name="publishFailureCount">本轮发布失败消息补发后仍失败的数量。</param>
    /// <param name="consumeRetryCount">本轮尝试重新入队消费失败消息的数量。</param>
    /// <param name="consumeFailureCount">本轮消费失败消息重新入队后仍失败的数量。</param>
    public MessageOutboxRetryResult(
        int publishRetryCount,
        int publishFailureCount,
        int consumeRetryCount,
        int consumeFailureCount
    )
    {
        PublishRetryCount = publishRetryCount;
        PublishFailureCount = publishFailureCount;
        ConsumeRetryCount = consumeRetryCount;
        ConsumeFailureCount = consumeFailureCount;
    }

    /// <summary>
    /// 本轮尝试补发发布失败消息的数量。
    /// </summary>
    public int PublishRetryCount { get; init; }

    /// <summary>
    /// 本轮发布失败消息补发后仍失败的数量。
    /// </summary>
    public int PublishFailureCount { get; init; }

    /// <summary>
    /// 本轮尝试重新入队消费失败消息的数量。
    /// </summary>
    public int ConsumeRetryCount { get; init; }

    /// <summary>
    /// 本轮消费失败消息重新入队后仍失败的数量。
    /// </summary>
    public int ConsumeFailureCount { get; init; }

    /// <summary>
    /// 本轮尝试补发或重新入队的消息总数。
    /// </summary>
    public int TotalRetryCount => PublishRetryCount + ConsumeRetryCount;

    /// <summary>
    /// 本轮补发或重新入队后仍失败的消息总数。
    /// </summary>
    public int TotalFailureCount => PublishFailureCount + ConsumeFailureCount;
}
⚠⚠    以下内容为AI分析的结果,请根据实际情况进行判断。

这是一个用于记录消息队列 Outbox 模式补发操作统计结果的不可变记录类型。让我来详细解释这个代码的设计和功能:

类型设计

public sealed record MessageOutboxRetryResult
  • record: 使用 C# 9.0 的记录类型,天然具有值语义和不可变性
  • sealed: 密封类,防止被继承
  • 这是一个专门用于数据传输的 DTO (Data Transfer Object)

核心功能

这个类用于统计 Outbox 模式中消息重试补发的结果,主要跟踪两个维度的操作:

1. 发布失败消息的补发 (Publish Retry)

public int PublishRetryCount { get; init; }     // 尝试补发的数量
public int PublishFailureCount { get; init; }  // 补发后仍失败的数量

2. 消费失败消息的重新入队 (Consume Retry)

public int ConsumeRetryCount { get; init; }     // 尝试重新入队的数量
public int ConsumeFailureCount { get; init; }  // 重新入队后仍失败的数量

计算属性

提供了两个便捷的计算属性来获取总体统计:

public int TotalRetryCount => PublishRetryCount + ConsumeRetryCount;
public int TotalFailureCount => PublishFailureCount + ConsumeFailureCount;

使用场景

这个类通常用于:

  1. 监控和报告: 跟踪消息重试机制的效果
  2. 系统健康检查: 通过失败率判断系统状态
  3. 运维统计: 为运维人员提供重试操作的数据支持

设计优势

  1. 不可变性: 一旦创建就不能修改,确保数据一致性
  2. 类型安全: 强类型定义避免数据混淆
  3. 简洁性: record 类型自动提供相等性比较和 ToString 实现
  4. 可扩展性: 计算属性提供了额外的统计维度

这种设计很好地体现了函数式编程的思想,适合在分布式系统中传递和处理统计数据。

评论加载中...