Spring Cloud Netflix:使用 Zuul Servlet 在 Zuul 配置中发生了什么?
Spring Cloud Netflix: Whats happening in ZuulConfiguration with the ZuulServlet?
查看 ZuulConfiguration,我看到以下内容:
@Bean
public ZuulController zuulController() {
return new ZuulController();
}
@Bean
public ServletRegistrationBean zuulServlet() {
return new ServletRegistrationBean(new ZuulServlet(),
this.zuulProperties.getServletPattern());
}
ZuulController 包装 ZuulServlet 并管理其生命周期,就好像它是一个 Spring 控制器一样。令我震惊的是 ZuulConfiguration class 无论如何都会使用 ServletRegistrationBean 注册 servlet。也许我想错了,但我认为你会做一个或另一个。有人可以解释为什么两者都是必要的吗?
使用此配置,ZuulServlet 运行 是真正的 servlet(由嵌入式 servlet 容器所知)、控制器(委托给 servlet)还是两者?
谢谢,
约书亚
来自this commit:
允许在 Zuul 代理中流式传输多部分请求
事实证明,Zuul 的多部分请求很糟糕
几乎完全来自 Spring 中的多部分处理
DispatcherServlet。此更改使代理路由可用
在替代路径 /zuul/ (其中
/zuul 是 zuul.servletPath 的默认值)。我有
使用 main 方法测试那些上传了 800MB 文件的文件
FormZuulServletProxyApplicationTests 和主要的
观察是没有 OutOfMemory 错误(没有人尝试
下载完整的请求正文)。它适用于功能区
并使用简单的 (HttpClient) 过滤器。带丝带的你
如果你想上传文件将需要设置一些超时
这么大,例如在测试中查看 application.yml:
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 60000
ribbon:
ConnectTimeout: 3000
ReadTimeout: 60000
您需要在 "Transfer-Encoding: chunked"
传入请求。 Chrome 默认不这样做
显然,但我能够用 curl 进行测试,例如
$ curl -v -H "Transfer-Encoding: chunked" \
-F "file=@mylarg.iso" \
localhost:9999/zuul/direct/file
通过 DispatcherServlet 的旧代理路径仍然存在
可用(为了向后兼容和方便
在上下文路径的根目录中提供可用路径)。
查看 ZuulConfiguration,我看到以下内容:
@Bean
public ZuulController zuulController() {
return new ZuulController();
}
@Bean
public ServletRegistrationBean zuulServlet() {
return new ServletRegistrationBean(new ZuulServlet(),
this.zuulProperties.getServletPattern());
}
ZuulController 包装 ZuulServlet 并管理其生命周期,就好像它是一个 Spring 控制器一样。令我震惊的是 ZuulConfiguration class 无论如何都会使用 ServletRegistrationBean 注册 servlet。也许我想错了,但我认为你会做一个或另一个。有人可以解释为什么两者都是必要的吗?
使用此配置,ZuulServlet 运行 是真正的 servlet(由嵌入式 servlet 容器所知)、控制器(委托给 servlet)还是两者?
谢谢,
约书亚
来自this commit:
允许在 Zuul 代理中流式传输多部分请求
事实证明,Zuul 的多部分请求很糟糕 几乎完全来自 Spring 中的多部分处理 DispatcherServlet。此更改使代理路由可用 在替代路径 /zuul/ (其中 /zuul 是 zuul.servletPath 的默认值)。我有 使用 main 方法测试那些上传了 800MB 文件的文件 FormZuulServletProxyApplicationTests 和主要的 观察是没有 OutOfMemory 错误(没有人尝试 下载完整的请求正文)。它适用于功能区 并使用简单的 (HttpClient) 过滤器。带丝带的你 如果你想上传文件将需要设置一些超时 这么大,例如在测试中查看 application.yml:
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 60000
ribbon:
ConnectTimeout: 3000
ReadTimeout: 60000
您需要在 "Transfer-Encoding: chunked" 传入请求。 Chrome 默认不这样做 显然,但我能够用 curl 进行测试,例如
$ curl -v -H "Transfer-Encoding: chunked" \
-F "file=@mylarg.iso" \
localhost:9999/zuul/direct/file
通过 DispatcherServlet 的旧代理路径仍然存在 可用(为了向后兼容和方便 在上下文路径的根目录中提供可用路径)。