摘要:主要是总结了一下这段时间在使用 feign 的过程中的遇到的一些坑点。
一、Get请求自动转化成POST的问题
1、client 请求参数没有加上 @RequestParam 注解
问题代码:
1 | @GetMapping("/showName") |
错误提示:
1 | [{"timestamp":"2022-12-14T09:46:22.370+00:00","status":405,"error":"Method Not Allowed","path":"/showName"}] |
修改建议:
在对应的请求参数上加上 @RequestParam 注解,代码示例如下所示:
1 | @GetMapping("/showName") |
2、client 请求参数中使用了 @RequestBody 注解
问题代码:
1 | @GetMapping("/showBody") |
错误提示:
1 | [{"timestamp":"2022-12-14T10:04:08.943+00:00","status":405,"error":"Method Not Allowed","path":"/showBody"}] |
原因:
okhttp 和 HttpURLConnection 不支持 @RequestBody + RequestMethod.GET,只有 httpclient 支持,默认使用 HttpURLConnection。
修改建议:
1、最佳建议:要求提供方,更改为Post请求
2、使用 httpclient
1 | 引入 httpclient 包 |
二、Feign Hystrix 熔断、线程使用坑点
hystrx 官方配置解释地址:https://github.com/Netflix/Hystrix/wiki/Configuration
线程池队列配置问题
常用配置:
1 | # 核心线程池大小,默认值为:10 |
错误配置①:
1 | hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=1000 |
feign使用的是懒加载,第一次调用时,会初始化各种bean,速度很慢,默认1秒很容易超时。
错误配置②:
1 | hystrix.threadpool.default.coreSize = 10 |
因为 queueSizeRejectionThreshold 太小,实际上在并发达到 30 以上的时候,就会拒绝后面的请求了。
错误配置③:
1 | hystrix.threadpool.default.coreSize = 10 |
因为 maxQueueSize 太小,实际上在并发达到 30 以上的时候,就会拒绝后面的请求了。
- 本文作者: th3ee9ine
- 本文链接: https://www.blog.ajie39.top/2022/12/18/feign坑点总结/
- 版权声明: 本博客所有文章除特别声明外,均采用 LICENSE 下的许可协议。转载请注明出处!