阿里蚂蚁金服面试--幂等性实现

Posted go大鸡腿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了阿里蚂蚁金服面试--幂等性实现相关的知识,希望对你有一定的参考价值。

前言

由于之前没有总结完整,导致在面试的时候老是有卡壳,比如说最近微众银行的二面,如果通过数据库来实现幂等性

参考文章

MQ方案

在服务端的时候是at lease one,就是会多次发送保证说在网络问题或者客户端宕机等等情况下,可以进行多次发送,保证客户端能接收到。那么这时就需要去重。
去重
主要通过messageId进行相应的去重

相关思想

就是有消息状态表,还有对应的标识,可以是messageId或者业务id,去重过程是去查询是否已经消费这条消息,当然如果客户端代码有问题,那么会进行消息重试机制。

DB方案

可以参照mq的方案,下面是几种情况

  1. 就是会有个消息表,以业务id来构建唯一键,然后插入成功,就执行业务,然后标识消息执行完成的状态。
  2. 插入消息成功,但是业务失败的话,会改成失败的标识,方便后续重试。
  3. 插入消息成功,宕机了,那么这里像文章里面讲的,消息表需要一个过期的时间,也就是那些正在执行的消息,过了某个过期时间还没修改状态,那么需要剔除。
  4. 插入消息失败,证明重复消费,剔除即可

其他简单的像:查询的时候用for update,其他就修改不了这条数据。进行相应的修改等等

redis方案

只需要实现分布式锁,以业务id为key,然后先查询有没有对应的数据,没有再插入,然后释放锁。
这时像那些重发很快的请求,肯定是没有拿到锁的,直接剔除。
如果说业务执行完,因为种种原因导致又重发,可以在查询对应数据的步骤,将请求剔除。
比如说订单id为1,用户A给商家b付款,这时肯定有相应的支付流水,可以根据这个去作为判断。

以上是关于阿里蚂蚁金服面试--幂等性实现的主要内容,如果未能解决你的问题,请参考以下文章

阿里P7Java最全面试296题:阿里天猫蚂蚁金服含答案文档解析

刚参加完阿里蚂蚁金服中间件6轮面试!实拍题目和6点血泪总结!

「面经」阿里蚂蚁金服 offer 之路

参加完阿里蚂蚁金服Java中间件6轮面试题!6点血泪总结~

参加完阿里蚂蚁金服Java中间件6轮面试题!6点血泪总结~

阿里蚂蚁金服Java程序员面试的11个问题,你会几个呢?