投递保证定义消息系统在消息处理过程中对投递的严格程度。
随着您对消息投递做出更强的保证,系统需要执行更多检查和确认,以确保消息被投递,或维护状态以确保消息仅被投递指定次数。这会增加系统延迟并降低整体吞吐量。每条消息可能需要额外的内部确认,以及相应数量的额外往返,才能被视为已投递。
- Queues 默认提供至少一次投递,以优化可靠性。
- 这意味着消息保证至少被投递一次,在极少数情况下可能被投递多次。
- 对于大多数应用程序,这是在不丢失消息与最小化端到端延迟之间的正确平衡,因为精确一次(exactly once)投递在任何消息系统中都会带来额外开销。
如果多次处理同一条消息会引入非预期行为,请在将消息写入队列时生成唯一 ID,并将其用作数据库插入的主键和/或处理后的幂等键以去重。例如,将此幂等键用作上游邮件 API 或支付 API 中的 ID,可让这些服务代表您拒绝重复请求,而无需在应用程序中维护额外状态。