知识卡片

至少一次需幂等

普通读书笔记卡 · 1790.b

内容

消息系统常提供至少一次处理保证,这意味着失败重试可能导致重复更新。下游状态更新必须设计成幂等,或带事务去重标识,否则可靠投递反而会制造错误结果。

参考来源

- 位置:《大数据系统构建:可扩展实时数据系统构建原理与最佳实践》第14章《队列和流处理》"14.1.1 单消费者队列"一节(源文件:_epub-src/OEBPS/Text/102.xhtml) - 结论依据:原文明确"如果事件处理失败或发生超时,队列服务器将允许另一个客户端通过一个单独的get调用来检索相同的事件。因此,若使用该方法,一个事件可能会被处理多次……但每个事件至少被处理一次是毋庸置疑的",说明重试保证的是"至少一次"而非"恰好一次",下游必须自行处理重复。 - 原始内容:单消费者队列的设计基于这样一种想法:当从队列中读取一个事件时,该事件不会立即被删除……如果事件处理失败或发生超时,队列服务器将允许另一个客户端通过一个单独的get调用来检索相同的事件。因此,若使用该方法,一个事件可能会被处理多次(例如,一个客户端处理事件,但在确认成功之前宕机),但每个事件至少被处理一次是毋庸置疑的。