通过Zuul上传文件
如果你使用@enablezuulproxy,你可以使用代理路径来上传文件,只要文件很小,它就可以工作。对于大文件,有另一种路径,可以绕过Spring DispatcherServlet(以避免多部分处理)在“/zuul/”中。换句话说,如果你有zuul.route.customers=/customers/*,然后您可以将大文件发布到/zuul/customers/*。servlet路径通过zuul.servletPath外部化。如果代理路由带您经历一个带负载均衡器,那么超大的文件也需要更高的超时设置,如下面的例子所示:
application.yml。
#hystrix timeout 时间要大于ribbon timeout 时间,否则 hystrix 熔断了以后,ribbon的重试就都没有意义了 hystrix: command: default: execution: isolation: thread: timeoutInMilliseconds: 160000 #ribbon timeout 计算:(ReadTimeout + ConnectTimeout) * (MaxAutoRetries + 1) * (MaxAutoRetriesNextServer + 1) ribbon: ReadTimeout: 20000 ConnectTimeout: 20000 MaxAutoRetries: 1 MaxAutoRetriesNextServer: 1
请注意:
1、对于流式处理大型文件,您需要在请求中使用分块编码(有些浏览器在默认情况下不会这样做),如下面的例子所示:
$ curl -v -H "Transfer-Encoding: chunked" \
-F "file=@mylarge.iso" localhost:9999/zuul/customers/file