业务中如何实现幂等性
2018-01-31 本文已影响0人
94nbiot
在消息处理中经常需要考虑到消息重复发送了怎么办?
这个时候需要做幂等处理,也就是一个消息只能被消费一次,那如何判断一个消息已经被消费了呢?
1、利用类似mysql这种具有唯一性约束的数据库机制
评论:需要落库,比较重
2、消费消息的时候,先根据唯一key值做一次select,有则不用消费,没有则消费
评论:select不一定是从关系型数据库中获取
3、利用集合的contains方法
评论:分布式环境下可以借助redis来实现,存在网络消耗,且集合的大小需要确定一个固定大小,或者设计成一个队列,
分布式网络环境下,如何本地缓存实现去重?
4、利用分布式缓存(如redis),做已处理标识位,每次处理消息的时候都去check一下