异步回调重复处理

文章目录
  1. 1. 正常处理
    1. 1.1. 使用队列和线程
    2. 1.2. 使用消息中间件
  2. 2. 解决重复问题

现在对接第三方接口很多情况都会有异步回调模块,微信支付、网易云信等都有,回调不仅是一次的,多次的情况如何避免多次重复调用问题呢?

正常处理

使用队列和线程

1.通过回调方法解密回调内容,将内容放到队列中,防止频繁的调用数据库 io 频繁,导致数据库崩溃
2.用线程往队列里取数据进行处理,排队处理不会出现并发等问题产生

使用消息中间件

1.通过回调方法解密回调内容,将内容添加到消息队列中
2.通过处理成功才提交,保证消息被消费到,没有处理成功的消息会继续消费,直到成功为止

缺点就是多次请求没有去重复处理

解决重复问题

使用 redis或者静态 map,回调内容通过将内容的唯一属性值作为 key,存在则跳过,不会加入到队列中

redis 的时候需要设置失效时间,具体按照你的业务来设置,例如回调大概就几秒钟以内,你可以设置成10秒已上将数据清除

评论