Spring cloud openfeign调用两次的问题
springcloudloadbalancerretryenabled = false 配置不生效
通过查看Spring源码发现
在上面图做的循环调用
最终发现如果你不是get请求,等于get才会返回true才会重复尝试。post 你就不会调用两次。
所以 老老实实的 get请求 就获取数据 即使调用两次没有任何影响
如果是保存数据那么规规矩矩用post就不会出现两次调用
综上所述把feign调用写好 get就不要保存数据就没问题啦
另外还有解决方案就是。配置feign client 的 timeout超时 时间加大也可以 但是不能本质解决 两次调用
首先feign接口处和被调用的controller接口无法相同。
1:如果controller的接口有@RequestParm制定了参数名称,那么feign那里也要加入这个注解的属性,并且名字也要取的相同。
2:feign处必须有@RequestParm注解(针对get请求),controller处不一定需要该注解
3:如果想使用get请求传输pojo对象,就使用@SpringQueryMap注解,这个注解会帮我们解析传入的对象的参数然后拼接到url(这里不懂等会讲原理)
4:@SpringQueryMap只能使用一次,使用多次,后面参数接收的值都是填充第一个参数的值。
传入的值为4月1号和4月22号,
然后尝试将传入的参数改为@SpringQueryMap DatesVo datesVo,并不能解析复杂对象,因为feign的本质是对>
引用Session中的对象前一定要判断一下是不是null ,如>
1启动类没有添加@EnableFeignClients 注解
2client 请求方式不一致,比如消费方定义为POST,服务方定位为GET
3接口返回参数未定义,比如定位返回结果为ResponseEntity,feign 无法识别,需要定义完整的返回类型,比如ResponseEntity<String>
本地调试Feign远程接口时, 依赖注册中心, Spring上下文环境, 在项目比较庞大的时候, 调试缓慢不利于问题排查; 下面的案例用最简单的配置来实现Feign的远程调用
构造Feign的配置可以按需加入编码解码器, 拦截器等, 通过动态代理的方式进行接口的调用, 具体参考Target实现类 HardCodedTarget
以上就是关于feign调用了两次的问题全部的内容,包括:feign调用了两次的问题、feign的使用注意、feignClient无法获取返回值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)