mirror of
https://github.com/spring-cloud/spring-cloud-netflix.git
synced 2026-10-01 00:39:05 +00:00
It turns out that the suckiness of Zuul with multipart requests comes almost entirely from the Multipart handling in Spring's DispatcherServlet. This change makes the proxy routes available on an alternative path /zuul/<normal_path> (where /zuul is the default value of zuul.servletPath). I have tested those with 800MB file uploads using the main method in the FormZuulServletProxyApplicationTests and the main observation is that there is no OutOfMemory error (no-one tries to download the complete request body). It works with Ribbon and with the simple (HttpClient) filter. With Ribbon you will need to set some timeouts if you want to upload files as large as that, e.g. see application.yml in the tests: hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 60000 ribbon: ConnectTimeout: 3000 ReadTimeout: 60000 You need to set "Transfer-Encoding: chunked" in the incoming request. Chrome does not do this by default apparently, but I was able to test with curl, e.g. $ curl -v -H "Transfer-Encoding: chunked" \ -F "file=@mylarg.iso" \ localhost:9999/zuul/direct/file The old proxy paths through the DispatcherServlet are still available (for backwards compatibility and for convenience of having the paths available at the root of the context path). Fixes gh-254
// Do not edit this file (e.g. go instead to src/main/asciidoc) This project provides Netflix OSS integrations for Spring Boot apps through autoconfiguration and binding to the Spring Environment and other Spring programming model idioms. With a few simple annotations you can quickly enable and configure the common patterns inside your application and build large distributed systems with battle-tested Netflix components. The patterns provided include Service Discovery (Eureka), Circuit Breaker (Hystrix), Intelligent Routing (Zuul) and Client Side Load Balancing (Ribbon). == Features * Service Discovery: Eureka instances can be registered and clients can discover the instances using Spring-managed beans * Service Discovery: an embedded Eureka server can be created with declarative Java configuration * Circuit Breaker: Hystrix clients can be built with a simple annotation-driven method decorator * Circuit Breaker: embedded Hystrix dashboard with declarative Java configuration * Declarative REST Client: Feign creates a dynamic implementation of an interface decorated with JAX-RS or Spring MVC annotations * Client Side Load Balancer: Ribbon * External Configuration: a bridge from the Sprnig Environment to Archaius (enabls native configuration of Netflix components using Spring Boot conventions) * Router and Filter: automatic regsitration of Zuul filters,a nd a simple convention over configuration approach to reverse proxy creation