消息发送一致性
1 2 3步 先扔消息队列 4 如果发送成功 进行业务处理 否则退出业务 5 6 发送确认消息
存在的问题
2 第二步消息中间件存储成功或失败之后,消息中间件挂了 应用不知道消息入库的结果
3 返回应用结果超时,应用不知道消息入库的结果,如果成功,但是结果没有给应用,导致不一致,或者应用挂了,没来得及处理
5,6 业务操作之后 发送处理结果失败
涉及数据的一致性有3个地方 业务处理数据,业务之前的消息 业务之后的消息
由消息中间件重复处理为完成的消息
以上方案严重依赖消息中间件,消息中间件不可用导致业务不可用
业务不直接发送数据,先写入本地数据库,然后消息中间件轮训消息表
或者轮训的操作由业务方来做
参考 大型网站系统与Java中间件实践