namespace Dpz.Core.MessageQueue.Models;
/// <summary>
/// Outbox 后台补发服务记录在缓存中的最近一次运行状态。
/// </summary>
public sealed record MessageOutboxRetryState
{
/// <summary>
/// 初始化 Outbox 后台补发运行状态。
/// </summary>
/// <param name="startedAtUtc">本轮补发开始时间(UTC)。</param>
/// <param name="completedAtUtc">本轮补发完成时间(UTC)。</param>
/// <param name="publishRetryCount">本轮尝试补发发布失败消息的数量。</param>
/// <param name="publishFailureCount">本轮发布失败消息补发后仍失败的数量。</param>
/// <param name="consumeRetryCount">本轮尝试重新入队消费失败消息的数量。</param>
/// <param name="consumeFailureCount">本轮消费失败消息重新入队后仍失败的数量。</param>
public MessageOutboxRetryState(
DateTimeOffset startedAtUtc,
DateTimeOffset completedAtUtc,
int publishRetryCount,
int publishFailureCount,
int consumeRetryCount,
int consumeFailureCount
)
{
StartedAtUtc = startedAtUtc;
CompletedAtUtc = completedAtUtc;
PublishRetryCount = publishRetryCount;
PublishFailureCount = publishFailureCount;
ConsumeRetryCount = consumeRetryCount;
ConsumeFailureCount = consumeFailureCount;
}
/// <summary>
/// 本轮补发开始时间(UTC)。
/// </summary>
public DateTimeOffset StartedAtUtc { get; init; }
/// <summary>
/// 本轮补发完成时间(UTC)。
/// </summary>
public DateTimeOffset CompletedAtUtc { get; init; }
/// <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; }
}
⚠⚠ 以下内容为AI分析的结果,请根据实际情况进行判断。
这段代码定义了一个用于记录消息队列 Outbox 模式后台补发服务运行状态的不可变数据模型。让我详细解释一下:
代码结构分析
1. 类型定义
public sealed record MessageOutboxRetryState
- 使用
record关键字定义不可变记录类型 sealed防止被继承- 用于存储 Outbox 后台补发服务的运行状态快照
2. 构造函数
构造函数接收6个参数,用于初始化一次完整的补发运行状态:
- 时间相关:开始时间和完成时间(UTC)
- 发布重试相关:重试数量和失败数量
- 消费重试相关:重试数量和失败数量
3. 属性说明
时间属性
StartedAtUtc:补发任务开始时间CompletedAtUtc:补发任务完成时间
发布相关统计
PublishRetryCount:尝试重新发布失败消息的总数PublishFailureCount:重新发布后仍然失败的消息数
消费相关统计
ConsumeRetryCount:尝试重新入队消费失败消息的总数ConsumeFailureCount:重新入队后仍然失败的消息数
使用场景
这个模型主要用于:
- 监控和观测:跟踪 Outbox 后台服务的运行效果
- 故障诊断:通过失败统计定位问题
- 性能分析:评估补发策略的有效性
- 运维告警:基于失败率触发告警机制
设计特点
- 不可变性:使用
record和init确保数据一致性 - 完整性:涵盖了发布和消费两个维度的重试统计
- 时间精确性:使用 UTC 时间避免时区问题
- 类型安全:强类型设计,避免运行时错误
这是一个设计良好的数据传输对象,适合在分布式系统中进行状态监控和问题诊断。
评论加载中...