All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m9s
将实名事件身份收敛为受 Outbox 上限约束的稳定摘要,并允许相同 CUCC 回调原子认领失败终态后重试。 Constraint: 运营商回调固定返回成功,公共 Outbox event_id 上限为 64 字符 Rejected: 扩大数据库字段 | 根因是不受控事件 ID,且无法解决旧 failed 回调被吞 Confidence: high Scope-risk: moderate Directive: 新增稳定事件 ID 时必须服从持久化长度上限;失败回调恢复必须使用条件更新原子认领 Tested: gofmt;git diff --cached --check Not-tested: 按用户要求未运行自动化测试、构建或测试环境重放
48 lines
1.5 KiB
Go
48 lines
1.5 KiB
Go
package constants
|
|
|
|
import "time"
|
|
|
|
const (
|
|
// OutboxStatusPending 表示事件待投递。
|
|
OutboxStatusPending = 1
|
|
// OutboxStatusDelivering 表示事件已被 Relay 租约领取。
|
|
OutboxStatusDelivering = 2
|
|
// OutboxStatusDelivered 表示事件已成功提交到队列。
|
|
OutboxStatusDelivered = 3
|
|
// OutboxStatusFailed 表示事件达到最终失败或等待人工重放。
|
|
OutboxStatusFailed = 4
|
|
)
|
|
|
|
const (
|
|
// OutboxEventIDMaxLength 是公共 Outbox 稳定事件ID的数据库长度上限。
|
|
OutboxEventIDMaxLength = 64
|
|
// OutboxDefaultMaxRetries 是公共 Outbox 默认最大重试次数。
|
|
OutboxDefaultMaxRetries = 10
|
|
// OutboxDefaultLeaseDuration 是 Relay 默认租约时长。
|
|
OutboxDefaultLeaseDuration = time.Minute
|
|
// OutboxDefaultBatchSize 是 Relay 默认单批领取数。
|
|
OutboxDefaultBatchSize = 100
|
|
// OutboxBaseRetryDelay 是瞬时失败指数退避的基础时长。
|
|
OutboxBaseRetryDelay = 5 * time.Second
|
|
// OutboxMaxRetryDelay 是瞬时失败指数退避的上限。
|
|
OutboxMaxRetryDelay = 30 * time.Minute
|
|
// OutboxRelayPollInterval 是 Worker 扫描到期事件的默认间隔。
|
|
OutboxRelayPollInterval = time.Second
|
|
)
|
|
|
|
// GetOutboxStatusName 返回 Outbox 内部状态中文名称。
|
|
func GetOutboxStatusName(status int) string {
|
|
switch status {
|
|
case OutboxStatusPending:
|
|
return "待投递"
|
|
case OutboxStatusDelivering:
|
|
return "投递中"
|
|
case OutboxStatusDelivered:
|
|
return "已投递"
|
|
case OutboxStatusFailed:
|
|
return "投递失败"
|
|
default:
|
|
return "未知"
|
|
}
|
|
}
|