以订单为例:
1.生产端的可靠性投递(100%发送消息成功)
1.消息打标
1.消息存入数据库---->状态为0
2.消息发送到brock
3.brock返回ack(网络可能会闪断)
4.当接收到ack时------>修改消息状态为1
5 兜底:定时去搜索状态为1的数据,重新发送到brock,直到数据库状态为1(也可以限制次数,超过次数设置为2)
2.消息延迟发送
1.消息落库
2.发送第一条消息
3.几分钟后发送第二条消息
4.下游服务器监听消息,并进行处理
5.下游服务器发送确定消息
6.上下游之间中立服务器,监听是否有确定的消息,若存在信息则持久化存储数据
7.收到第二条数据时,检查第一条数据是否成功,成功不做任何事情,若不成功则返回第一步重新发送
2.消费端的可靠性投递(避免重复消费)
1.通过消息的唯一id和数据库主键去重