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;
使用场景
这个类通常用于:
- 监控和报告: 跟踪消息重试机制的效果
- 系统健康检查: 通过失败率判断系统状态
- 运维统计: 为运维人员提供重试操作的数据支持
设计优势
- 不可变性: 一旦创建就不能修改,确保数据一致性
- 类型安全: 强类型定义避免数据混淆
- 简洁性: record 类型自动提供相等性比较和 ToString 实现
- 可扩展性: 计算属性提供了额外的统计维度
这种设计很好地体现了函数式编程的思想,适合在分布式系统中传递和处理统计数据。
评论加载中...