摘要:主要是总结了一下这段时间在使用 feign 的过程中的遇到的一些坑点。
一、Get请求自动转化成POST的问题
1、client 请求参数没有加上 @RequestParam 注解
问题代码:
@GetMapping("/showName") StringshowName(Stringname);
错误提示:
[{"timestamp":"2022-12-14T0922.370+00:00","status":405,"error":"MethodNotAllowed","path":"/showName"}]
修改建议:
在对应的请求参数上加上 @RequestParam 注解,代码示例如下所示:
@GetMapping("/showName") StringshowName(@RequestParam("name")Stringname);
2、client 请求参数中使用了 @RequestBody 注解
问题代码:
@GetMapping("/showBody") StringshowBody(@RequestBodyStringbody);
错误提示:
[{"timestamp":"2022-12-14T1008.943+00:00","status":405,"error":"MethodNotAllowed","path":"/showBody"}]
原因:
okhttp 和 HttpURLConnection 不支持 @RequestBody + RequestMethod.GET,只有 httpclient 支持,默认使用 HttpURLConnection。
修改建议:
1、最佳建议:要求提供方,更改为Post请求
2、使用 httpclient
引入 httpclient 包
io.github.openfeign feign-httpclient
修改配置:
feign.httpclient.enabled=true
二、Feign Hystrix 熔断、线程使用坑点
hystrx 官方配置解释地址:
https://github.com/Netflix/Hystrix/wiki/Configuration
线程池队列配置问题
常用配置:
#核心线程池大小,默认值为:10 hystrix.threadpool.default.coreSize=10 #调用超时时间,默认值为1000ms hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=15000 #最大线程池大小,这是在不开始拒绝的情况下可以支持的最大并发量。默认值为10。 hystrix.threadpool.default.maximumSize=50 #队列大小拒绝阈值,默认值为5。即使maxQueueSize未达到也会发生拒绝。在maxQueueSize==-1时不生效。 hystrix.threadpool.default.queueSizeRejectionThreshold=100 #maximumSize配置是否生效,默认值为false。maximumSize可以等于或高于coreSize。 #设置coreSize< maximumSize 创建一个可以维持maximumSize并发性的线程池; # 但会在相对不活动期间将线程返回给系统。(受限于keepAliveTimeInMinutes)。 hystrix.threadpool.default.allowMaximumSizeToDivergeFromCoreSize = true # 最大队列大小,默认值为 -1。值为-1时:使用 thenSynchronousQueue;值为正值时:使用 LinkedBlockingQueue。 hystrix.threadpool.default.maxQueueSize = 50
错误配置①:
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=1000
feign使用的是懒加载,第一次调用时,会初始化各种bean,速度很慢,默认1秒很容易超时。
错误配置②:
hystrix.threadpool.default.coreSize=10 hystrix.threadpool.default.maxQueueSize=1000 hystrix.threadpool.default.queueSizeRejectionThreshold=20
因为 queueSizeRejectionThreshold 太小,实际上在并发达到 30 以上的时候,就会拒绝后面的请求了。
错误配置③:
hystrix.threadpool.default.coreSize=10 hystrix.threadpool.default.maxQueueSize=20 hystrix.threadpool.default.queueSizeRejectionThreshold=1000
因为 maxQueueSize 太小,实际上在并发达到 30 以上的时候,就会拒绝后面的请求了。
审核编辑:汤梓红
-
代码
+关注
关注
30文章
4786浏览量
68548 -
线程
+关注
关注
0文章
504浏览量
19677
原文标题:feign 调用常见问题避坑指南!
文章出处:【微信号:AndroidPush,微信公众号:Android编程精选】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论