问题:
Feign 在文件上传接口传递 MultipartFile对象时,对应服务的文件上传接口接不到请求
原因:
Feign在转发时,是以普通表单形式发送给对应服务,以ContentType=application/x-www-form-urlencoded的表单发送,而文件上传需form-data的ContentType,故服务端接收不到请求
解决方案:
在@RequestMapping(xxx, produces = {MediaType.APPLICATION_JSON_UTF8_VALUE},consumes = MediaType.MULTIPART_FORM_DATA_VALUE) 添加produces 和 consumes字段指明数据格式(json)和ContentType即可解决问题
注:若没有设定Feign的回调时间,且文件上传时间超过1秒,则不管请求是否成功,Feign都会调用回调方法返回错误
原因:
Feign在调用内部服务时,因为熔断器的默认超时时间是1s,而服务处理超过了1s,接口还没处理完,就直接被熔断处理了。
解决方案:
设置最大超时熔断: ** 在写这些配置的时候是不会有提示的,但配置还是会生效的
# 熔断器开启
feign:
hystrix:
enabled: true
#hystrix的超时时间
hystrix:
command:
default:
execution:
timeout:
enabled: true
isolation:
thread:
timeoutInMilliseconds: 9000
#ribbon的超时时间
ribbon:
ReadTimeout: 3000
ConnectTimeout: 3000