消息队列的投递语义描述故障和重试下消息可能被交付的次数,以及系统在哪一段链路提供相应保证。
常见语义
至多一次允许丢失但避免重复交付;至少一次允许重复,需要消费者处理重复;恰好一次必须说明边界,代理内事务不自动涵盖外部数据库、邮件或支付副作用。
确认与业务提交
生产确认表明代理按相应规则接收消息,不等于业务消费完成。消费者应在业务持久化成功后按协议确认;若业务成功后确认丢失,消息可能重投,应以业务键或消息标识配合原子去重。
自动确认、持久化和网络断开后的重发各有独立影响,不能只选一个开关就宣称端到端不丢不重。