Java 实习记录:消息回调、幂等与可靠消费
在中能元器件交易与技术交流平台的开发中,我接触较多的是“消息最终会来,但不一定只来一次,也不一定按预期顺序来”的问题。
回调先快速确认
微信回调需要尽快返回 ACK。耗时的 AI 回复不应阻塞回调线程,因此处理链路拆为:
- 校验并记录消息;
- 使用 Redis 完成重复消息过滤;
- 快速返回 ACK;
- 异步执行 AI 回复;
- 必要时通过客服消息接口补发结果。
使用监听模型管理 RabbitMQ
原有手写连接池和轮询消费被替换为 Spring AMQP 监听模型。ACK/NACK 决定消息去向,死信队列隔离持续失败的任务,Redis TTL 锁则用于减少短时间内的重复互动通知。
支付回调的幂等
微信和支付宝支付回调都可能重复到达。订单处理需要把“收到通知”和“状态实际发生变化”分开:通过分布式锁、业务幂等键和状态机校验保证同一个订单不会被重复结算,再通过异步消息推进后续业务。
这些机制并不只服务于支付。凡是跨网络、跨进程的消息链路,都应默认面对超时、重试、重复与乱序。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 王越峰!


