使用消息队列,我们肯定希望不丢消息,也就是消息队列组件,需要保证消息的可靠交付。消息交付的可靠性保障,有以下三种承诺:
- 最多一次(at most once):消息可能会丢失,但绝不会被重复发送。
- 至少一次(at least once):消息不会丢失,但有可能被重复发送。
- 精确一次(exactly once):消息不会丢失,也不会被重复发送。
默认是一般是 至少一次
,也就是 Broker 收到并成功提交消息,并且 Producer 成功应答才会认为消息已经发送。
某些情况下,比如网络波动等,导致应答没有成功送达,会导致 Producer 重试,从而导致消息的重复发送。