问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

利用feign的重试机制刷新过期的请求Token

发布网友 发布时间:2022-11-29 19:38

我来回答

1个回答

热心网友 时间:2023-10-28 14:29

feign的重试默认是不开启的,一般再业务中对于重试都非常谨慎,特别是写操作,一定都要保证目标接口实现了幂等才能发起重试,不然就是灾难。但是在一些场景下重试可以简化实现逻辑,比如接口的jwt token过期了,那么在请求响应token过期错误的时候将token刷新后发起重试可以避免请求失败,并且也减少了token有效期的维护逻辑。

因为不是全局开启重试,单独写一个Config类然后作为参数传递给feign client是最好的方式。

流程上大概是从请求结果得知token过期并重置token,然后交给重试器去判断是否需要重置,随后在重试的请求*内刷新token并设置新的token。这里需要自定义feign的RequestInterceptor 、Retryer、ErrorDecoder 一起组合完成判断、重试和token的刷新

feign通过调用配置的Retryer.continueOrPropagate判断是否可以重试,如果抛exception那么重试就终止。需要重试的时候直接return,详细可以参考Retryer接口的Default实现,默认情况下开启的话feign会重试5次。我们只需要刷新token,因此重试一次即可,加计数器并在clone方法里传递到下一次重试中用于判断重试次数

为了方便判断我定义了一个MyRetryException并在errorDecoder里面判断http状态码为token过期状态码(我们使用的是402),更为严谨的做法是还要判断响应内容的业务状态码。在读取http response body的时候需要注意,在FeignException.errorStatus方法内已经将body读取并关闭了stream,这时可以通过FeignException的contentUTF8方法读取

如果要看重试的情况,可以开启debug日志,在重试前,feign会打印日志如下
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
少儿学什么舞蹈 青年学什么舞蹈好 成年人学什么舞蹈 福州企业最低工资标准 2013年厦门的底薪是多少 生产要素的需求有哪些性质 生产要素的需求有何特点? 什么是生产要素需求 微观经济学要素需求什么是条件要素需求?它和要素需求有什么不同?_百度... 养宠物的人遵守规则,是不是就能和别人平安相处呢? 冻虾有海洋创伤弧菌嘛 驾驶员多次无证驾驶怎么处罚? 多次无证驾驶怎么处罚 每天早上起床鼻涕里都有一点血丝是什么问题? 小孩子平时不讲卫生还破坏东西,如何改变孩子的坏习惯? 孩子爱乱扔东西,还到处搞破坏,该怎么教育 怎么去北京市劲松职业高中这个学校,地址是北京市朝阳区劲松八区811楼 北京市劲松职业高级中学的介绍 北京市朝阳区劲松八区817号是在几环啊 劲松属于市里吗? 劲松八区归哪家物业中心 关于感恩手抄报内容大全 20021010今年9月开始上大专,大专毕业还来得及报名当兵吗? 白酒可以泡红枣党参枸杞吗 42度的白酒能做酒枣吗 海尔空调暖气+10e什么意思啊? 如何清理小米4手机中相册显示不出来的照片? 严重瑕疵的房子能要求退房吗 小班安全活动《防火》教案 起名字!要特别的,脱俗的,游戏里的。 请问如何处理过期的问题? 过期提问怎么处理 怎样处理过期问题 火爆是什么意思? 京东全民火爆什么意思 现场之火爆是什么意思 怀孕两个月如果停胎有什么症状 父亲姓王,母亲姓麦,请帮忙孩子起一个名字, 雪花秀蜜皂怎么样 雪花秀蜜皂功效 雪花秀宫中蜜皂好用吗?好评度很高的一款洁面 雪花秀宫中蜜皂适合什么肤质?雪花秀宫中蜜皂适合多大年龄? 雪花秀宫中蜜皂怎么样?雪花秀宫中蜜皂怎么用? 想从西塘去杭州 西塘有直接到杭州的大巴吗 足癣系脚气,用脚气立康管用么? 手上长了很顽固的手藓,从前都是用脚气立康涂抹压制,最近好像压制不住了,有什么药可以彻底祛除吗? 推荐一款电动牙刷!要求刷头容易买更换,经济实惠的! “网名”英语怎么说? 一级消防工程师如果考了71.5怎么办 一消技术实务如果考了71.5怎么办 不用充钱就能隐藏游戏的软件vivo手机