首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >幂等ID的过期时间怎么设置

幂等ID的过期时间怎么设置

作者头像
只喝牛奶的杀手
发布2021-07-16 11:16:29
2K0
发布2021-07-16 11:16:29
举报

说到幂等性,大家应该并不陌生,幂等ID的过期时间如何设置呢?我们公司是基于Redis实现的幂等框架的,如果简单粗暴的话,可以设置为大于程序的执行时间,如果加上微服务的重试呢?以Spring Cloud各个组件去举例子,各个组件之间的关系是什么,在这里就不详细的解释了。

spring-cloud-feign之所以默认Retryer.NEVER_RETRY,即不重试,是因为spring-cloud-feign整合了ribbon,ribbon也有重试策略,如果fegin也开启重试策略,容易造成混乱。

见FeignClientProperties源码:

我们没有配置feign的超时时间,使用ribbon的超时时间。如果配置了feign的就以feign为主。

ribbon默认开启重试(除了配置项, 还需要加入spring-retry):

判断isOkToRetryOnAllOperations=true(默认值为false)时, 返回RetryHandler实现

  • 判断HTTP Method
  • GET: 返回RetryHandler实现
  • !GET: 返回RetryHandler实现, 不一样的是其中二个bool值为False

来看下RequestSpecificRetryHandler构造函数中的几个参数

  • bool okToRetryOnConnectErrors: 字面意思是重试连接错误, 都为true
  • bool okToRetryOnAllErrors: 字面意思是重试所有错误, 只有HTTP Method不是GET时为false

备注:默认情况下,GET方式请求无论是连接异常还是读取异常,都会进行重试;非GET方式请求,只有连接异常时,才会进行重试。

ribbon.MaxAutoRetries (在同一个Server上重试的次数)默认为0, ribbon.MaxAutoRetriesNextServer(重试下一个Server的次数) 默认值为1.

  • 当MaxAutoRetries=0, MaxAutoRetriesNextServer=1时: 请求次数=RetryCount+1= (0+1) * (1+1) = 2次

也就是:RetryCount= (maxAutoRetries + 1) * (maxAutoRetriesNextServer + 1)-1

建议幂等ID的过期时间最小设置为:(connectTimeOut+readTimeOut+重试间隔时间)* 请求次数+程序执行时间。

备注:重试间隔时间默认1s,在指定multiplier(指定延迟倍数)为0的情况下。


分割线:说点晚上和一个朋友的聊天几个问题和感受:

  • 遇见难的问题,生活工作中,大多数人选择避开,你得有神挡杀神,佛挡杀佛的勇气。
  • 逻辑思维能力和你对技术的追求,底层能力过滤掉一大部分人。
  • 上升一个层次思考问题,你就不会和别人battle了,你是想赢,还是想赢得辩论。
  • 一切从社会需求考虑问题,本质能力,技术需要持续沉淀。
  • 越在意别人的看法,越局限自己,不要在意别人的看法,未来无限可能。
  • 你的市场的价值=你的价值+平台的价值。
  • 系统化的梳理业务和你的所学的技术。

最近我也在系统化的梳理业务和自己的技术,不要再碎片化了。希望我能跟上你的节奏!我们的征途是星辰大海!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-06-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 只喝牛奶的杀手 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档