产生的缘由:网络不可达问题。安全
网络超时以后咱们能够作的只有两件事,1 中止(回滚,但对于系统来讲影响特别大) 2 继续(另发送到别的服务消费端)网络
通常咱们采用第二种处理方式,可是要通过网络,必然会出现消息重复问题。并发
最好的解决方法是:异步
刚好不须要——幂等操做高并发
S * S = S (某个操做无论重复多少次,结果都同样)。设计
幂等消息去重:日志
- 保证有个惟一ID标记每一条消息
- 保证消息处理成功与去重表日志同事出现
代价:去重代价是去重日志的写入,数据校验,多台机器对去重表的维护。事件
- 如何保证消息发送与Bob帐户减钱同时成功或同时失败?
- 消息处理超时的解决?
- 消息处理失败如何解决?
尽可能保持消息接受者的幂等性扩展
可是对于非幂等的消息消费端:要记录日志表,内次执行时进行日志校验。配置
小结: