发送方法返回、Broker 确认与消费者完成业务,不是同一件事。若团队把它们都叫“消息成功”,故障时就很难判断该重发、重试还是对账。可靠消息需要明确每个确认的边界。
发送端负责确认投递阶段
发布确认帮助发送端了解 Broker 对发布的处理结果,具体可靠性仍取决于队列类型和相关配置。它不代表消费者已经完成业务。连接中断时未获得确定结果的消息,也可能需要重新判断或发送。
消费端在合适时机确认
消费确认过早,业务失败后可能失去正常重投机会;业务完成后、确认之前退出,又可能收到重复投递。因此消费处理必须配合幂等与持久化业务状态。
失败消息需要处理出口
明确哪些错误适合短期重试,哪些需要隔离、人工核对或修复后重放。不要让无法处理的数据无限快速回队列,挤占正常业务资源。
验收确认边界上的故障
分别在发送等待确认、消费处理中和业务成功后确认前中断连接或进程,核对最终业务状态。只有正常消息能够收发,不能证明可靠性设计完成。
常见问题:消息持久化就可以不做确认了吗?
不能。持久化、队列配置和两侧确认解决不同环节的问题,需要结合失败场景共同设计。
技术参考:RabbitMQ:发布与消费确认。具体接口与配置请结合使用版本核对。
将评估落实到你的系统
如果内部团队需要把这些约定落到可运行的工程中,可以通过微服务基础架构建设沟通接口、公共能力与交接范围,先以一个业务场景验证方案。