摘要:主要是總結(jié)了一下這段時(shí)間在使用 feign 的過(guò)程中的遇到的一些坑點(diǎn)。
一、Get請(qǐng)求自動(dòng)轉(zhuǎn)化成POST的問(wèn)題
1、client 請(qǐng)求參數(shù)沒(méi)有加上 @RequestParam 注解
問(wèn)題代碼:
@GetMapping("/showName") StringshowName(Stringname);
錯(cuò)誤提示:
[{"timestamp":"2022-12-14T0922.370+00:00","status":405,"error":"MethodNotAllowed","path":"/showName"}]
修改建議:
在對(duì)應(yīng)的請(qǐng)求參數(shù)上加上 @RequestParam 注解,代碼示例如下所示:
@GetMapping("/showName") StringshowName(@RequestParam("name")Stringname);
2、client 請(qǐng)求參數(shù)中使用了 @RequestBody 注解
問(wèn)題代碼:
@GetMapping("/showBody") StringshowBody(@RequestBodyStringbody);
錯(cuò)誤提示:
[{"timestamp":"2022-12-14T1008.943+00:00","status":405,"error":"MethodNotAllowed","path":"/showBody"}]
原因:
okhttp 和 HttpURLConnection 不支持 @RequestBody + RequestMethod.GET,只有 httpclient 支持,默認(rèn)使用 HttpURLConnection。
修改建議:
1、最佳建議:要求提供方,更改為Post請(qǐng)求
2、使用 httpclient
引入 httpclient 包
io.github.openfeign feign-httpclient
修改配置:
feign.httpclient.enabled=true
二、Feign Hystrix 熔斷、線程使用坑點(diǎn)
hystrx 官方配置解釋地址:
https://github.com/Netflix/Hystrix/wiki/Configuration
線程池隊(duì)列配置問(wèn)題
常用配置:
#核心線程池大小,默認(rèn)值為:10 hystrix.threadpool.default.coreSize=10 #調(diào)用超時(shí)時(shí)間,默認(rèn)值為1000ms hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=15000 #最大線程池大小,這是在不開(kāi)始拒絕的情況下可以支持的最大并發(fā)量。默認(rèn)值為10。 hystrix.threadpool.default.maximumSize=50 #隊(duì)列大小拒絕閾值,默認(rèn)值為5。即使maxQueueSize未達(dá)到也會(huì)發(fā)生拒絕。在maxQueueSize==-1時(shí)不生效。 hystrix.threadpool.default.queueSizeRejectionThreshold=100 #maximumSize配置是否生效,默認(rèn)值為false。maximumSize可以等于或高于coreSize。 #設(shè)置coreSize
錯(cuò)誤配置①:
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=1000
feign使用的是懶加載,第一次調(diào)用時(shí),會(huì)初始化各種bean,速度很慢,默認(rèn)1秒很容易超時(shí)。
錯(cuò)誤配置②:
hystrix.threadpool.default.coreSize=10 hystrix.threadpool.default.maxQueueSize=1000 hystrix.threadpool.default.queueSizeRejectionThreshold=20
因?yàn)?queueSizeRejectionThreshold 太小,實(shí)際上在并發(fā)達(dá)到 30 以上的時(shí)候,就會(huì)拒絕后面的請(qǐng)求了。
錯(cuò)誤配置③:
hystrix.threadpool.default.coreSize=10 hystrix.threadpool.default.maxQueueSize=20 hystrix.threadpool.default.queueSizeRejectionThreshold=1000
因?yàn)?maxQueueSize 太小,實(shí)際上在并發(fā)達(dá)到 30 以上的時(shí)候,就會(huì)拒絕后面的請(qǐng)求了。
審核編輯:湯梓紅
-
代碼
+關(guān)注
關(guān)注
30文章
4723瀏覽量
68237 -
線程
+關(guān)注
關(guān)注
0文章
504瀏覽量
19636
原文標(biāo)題:feign 調(diào)用常見(jiàn)問(wèn)題避坑指南!
文章出處:【微信號(hào):AndroidPush,微信公眾號(hào):Android編程精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論