消息发送一致性

1 2 3步 先扔消息队列 4 如果发送成功 进行业务处理 否则退出业务 5 6 发送确认消息

消息发送一致性


存在的问题

2 第二步消息中间件存储成功或失败之后,消息中间件挂了 应用不知道消息入库的结果

3 返回应用结果超时,应用不知道消息入库的结果,如果成功,但是结果没有给应用,导致不一致,或者应用挂了,没来得及处理

5,6 业务操作之后 发送处理结果失败

涉及数据的一致性有3个地方 业务处理数据,业务之前的消息 业务之后的消息

消息发送一致性

由消息中间件重复处理为完成的消息

以上方案严重依赖消息中间件,消息中间件不可用导致业务不可用

消息发送一致性

业务不直接发送数据,先写入本地数据库,然后消息中间件轮训消息表

或者轮训的操作由业务方来做

消息发送一致性

参考 大型网站系统与Java中间件实践