前端多次调用(伪幂等性问题)

1.一般情况

前端控制消息调用频率,禁用请求

2.网络不好,第一次调用响应时间过长,第二次又调用

针对一些重要的接口,建议进入页面时分配一个全局ID放到前端设备中,之后调用接口时先判断全局ID是否存在redis中,若已有则直接返回,若没有就设置超时时间存放到库里,业务处理完清理掉改全局ID。(安全等级高则可以选择redis分布式锁机制)

rpc调用幂等性问题

rpc的默认重试机制会导致调用方在规定超时时间和次数内反复调用被调用方

1.禁用重试(不合理)

2.加大超时时间(简单粗暴,理论上可行,超时时间越长越不容易发生幂等性)

3.rpc调用的一般是自己系统,调用方和被调用方可以共享一个库,所以全局ID法是可行的,全局ID的产生最简单的办法就是和业务ID直接挂钩,也可以间接挂钩(如用业务ID计算出一个新的ID),业务处理前进行幂等性校验。

httpClient幂等性问题

httpClient他底层也是有线程池,也是可以配置重试时间,重试次数的

1.禁用重试(不合理)

2.加大超时时间(简单粗暴,理论上可行,超时时间越长越不容易发生幂等性)

3.httpClient一般是调用别的系统,无法共享一个库,和rpc调用类似,不过需要和对方系统进行讨论决定,只考虑调用方的话,全局id和redis仍是最方便的处理方法

MQ幂等性问题

生产者给MQ服务器推消息,MQ服务器返回ack时卡了一下,结果生产者以为没有推成功,又退了一次,造成数据重复

消费者从MQ服务器获取消息,返回ack给MQ告诉已经消费过时卡了一下,结果又消费了一遍

1.推送时扔通过全局ID判断MQ服务器队列里是否已经有数据了

2.消费时扔通过全局ID判断该数据是否已经入库

总结

可以发现幂等性往往是双方的问题,双方需要一个中间件来确保数据不会重复,redis这类高性能库是首选,过期消息的特性可以保证数据不会累计过多,我认可可以当做一般项目的万金油解决方案,当然可以在此基础上在优化。

java项目中遇到的幂等性问题相关推荐

  1. Mac笔记本中是用Idea开发工具在Java项目中调用python脚本遇到的环境变量问题解决...

    问题描述: mac笔记本本身会自带几个python版本,比如python2.7版本,我没有改动mac默认的python版本,只是安装了python3.7版本. 使用Pycharm开发Python项目没 ...

  2. java聊天室小程序论文_在Java项目中利用continue与break制作一个聊天室小程序

    在Java项目中利用continue与break制作一个聊天室小程序 发布时间:2020-12-08 16:03:27 来源:亿速云 阅读:98 作者:Leah 在Java项目中利用continue与 ...

  3. java项目怎么定义异常_在Java项目中如何实现自定义异常

    在Java项目中如何实现自定义异常 发布时间:2020-11-11 15:41:32 来源:亿速云 阅读:77 作者:Leah 这篇文章将为大家详细讲解有关在Java项目中如何实现自定义异常,文章内容 ...

  4. XML在JAVA项目中的作用

    java项目中,xml文件一般都是用来存储一些配置信息 一般的编程, 多数用来存储配置信息 . 拿JDBC来说,可以把数据库连接字符串写到xml,如果要修改数据源,只需要改xml就可以了,没必要再去重 ...

  5. Redis学习笔记之二 :在Java项目中使用Redis

    成功配置redis之后,便来学习使用redis.首先了解下redis的数据类型. Redis的数据类型 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set( ...

  6. redis java驱动_Redis学习笔记之二 :在Java项目中使用Redis

    成功配置redis之后,便来学习使用redis.首先了解下redis的数据类型. Redis的数据类型 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set( ...

  7. Ant在Java项目中的使用(一眼就看会)

    参考:http://www.cnblogs.com/zhengqiang/p/5557155.html Ant是跨平台的构建工具,它可以实现项目的自动构建和部署等功能.在本文中,主要让读者熟悉怎样将A ...

  8. 在Java项目中整合Scala

    Scala是一个运行在Java JVM上的面向对象的语言.它支持函数编程,在语法上比Java更加灵活,同时通过Akka库,Scala支持强大的基于Actor的多线程编程.具有这些优势,使得我最近很想在 ...

  9. java项目中的classpath

    在java项目中,你一定碰到过classpath,通常情况下,我们是用它来指定配置/资源文件的路径.在刚开始学习的时候,自己也糊里糊涂,但是现在,是时候弄清楚它到底是指什么了. 顾名思义,classp ...

  10. 为什么在2012/2013年我将在新的Enterprise Java项目中继续使用Spring *和* Java EE

    自从我担任技术决策职务以来已经过去了一年多,很高兴看到我仍然与之保持着完美的和谐. 几个月前,我在KaiWähner的一个不错的博客中写了一个有关JEE与Spring的答案. 如果观点没有不同,那么讨 ...

最新文章

  1. IT人的“钱”景以及收入的两道坎
  2. 小功能 获取一段汉字的拼音首字母
  3. 【LeetCode笔记】1. 两数之和(JAVA、哈希表)
  4. chart.js x轴显示不全_机床大讲堂第67讲——基于FANUC系统的数控铣床增加第四轴的方法...
  5. python寻找完全平方数_少儿编程|Python小课堂 – 寻找aabb完全平方数
  6. 游戏开发中的向量数学
  7. wpf中使用ListView
  8. 如何在纯HTML的静态网页中添加一段统计网页访问量的JAVA Script代码?
  9. linux查询服务器域名解析记录
  10. hexo+github/gitee
  11. 用verilog编写按键消抖代码
  12. 业界资讯:小程序开放小游戏类别
  13. import nose ImportError: No module named 'nose'
  14. QImage/cv::Mat/HObject的图像格式互相转换,4字节对齐
  15. go-geecache 总结和收获
  16. Aforge做图像处理
  17. linux可以怎么玩(以阿里云Ubuntu服务器为例)(三)——Python零代码搞定个人云盘
  18. 【学习笔记】数据获取之爬虫笔记
  19. BLDC电机学习笔记
  20. MES制造执行系统如何降本增效

热门文章

  1. 宾州州立大学计算机本科,2020年宾州州立大学本科读几年
  2. 点击列表高亮_办公小技巧:妙用条件格式 高亮显示查询结果
  3. Pandas:金融数据下载和分析
  4. 互联网搜索 解决问题的心法 找什么 哪里找 怎么找
  5. 翻译: Keras 标准化:TensorFlow 2.0 中高级 API 指南
  6. java封装的注意事项_新手学习Java之对象---封装
  7. First Bad Version
  8. 564. 寻找最近的回文数
  9. vscode 配置python_VSCode配置Python版本
  10. antd vue form 手动校验_vue测试模板与jsonSchema自动生成elment组件