超超哥AI云计算超哥讲AI 出品

社群入口

AI 超哥 Codex 副业群

扫码加入群聊,一起交流 AI、Codex 与副业实践。

原图注明二维码于10月20日前有效;若提示过期或无法入群,请等待更新二维码。

AI 超哥 Codex 副业群入群二维码在新窗口打开原图

消息确认、重试、幂等与故障处理

WebSocket、消息队列与实时通信#Python全栈#第十六阶段#WebSocket、消息队列与实时通信#消息确认、重试、幂等与故障处理约 878 字 · 3 分钟阅读
追问显示
点击任意追问卡片可收起 / 展开

Publisher Confirm 与消费者 ACK 各确认哪一段流程?

追问 怎样分别跟踪发布、入队、处理和数据库提交?消息到达 Broker 之后,为什么仍然可能尚未产生业务结果?

消费者自动确认与手动确认适合什么场景?

追问 处理前确认和数据库提交后确认各有什么失败窗口?怎样避免为了吞吐提前确认,却在进程退出后丢掉尚未完成的工作?

ACK 的 Delivery Tag 为什么需要与 Channel 一起理解?

追问 重连后能否在新 Channel 上确认旧投递?multiple 确认在并行处理时有什么风险,怎样避免确认尚未完成的消息?

prefetch 如何影响未确认消息数量和消费者负载?

追问 设得过大或过小分别有什么表现?怎样结合耗时、并发和内存调节,为什么它不是业务幂等或全局并发上限的替代品?

消费失败时,ACK、Reject、Nack 与 requeue 怎样选择?

追问 参数错误、临时服务故障和永久失败应采用相同策略吗?为什么立即反复 requeue 可能形成热循环并拖累正常消息?

怎样实现有限重试与死信处理?

追问 重试次数、延迟、死信路由和人工恢复怎样设计?重新投递成功后再确认原消息的流程有哪些重复窗口,怎样核对所用队列类型的死信可靠性?

“至少一次”和“至多一次”交付各意味着什么?

追问 消费者提交数据库后、确认前退出会出现什么?为什么消息可能再次到达,需要怎样验证业务副作用只发生一次?

怎样用数据库约束与事务实现消费幂等?

追问 事件标识应如何定义业务范围?去重记录和业务修改怎样一起提交,外部发信或支付操作为什么还需要额外确认与对账?

数据库提交与消息发布无法一次原子完成时,怎样使用 Outbox?

追问 事件和业务记录如何在同一事务保存?分发器确认发布后如何更新状态,重复分发及通知延迟怎样进入恢复与监控?

发布确认超时后,怎样决定是否重发消息?

追问 如何区分明确失败与结果未知?使用同一事件标识重发怎样配合消费者幂等,持久化和发布确认为什么不能单独证明永不丢失?

确认核对资料: RabbitMQ:Consumer Acknowledgements and Publisher Confirms。