【问题标题】:Spring Cloud Netflix: Whats happening in ZuulConfiguration with the ZuulServlet?Spring Cloud Netflix:使用 Zuul Servlet 在 Zuul 配置中发生了什么?
【发布时间】:2015-08-19 00:53:54
【问题描述】:

查看ZuulConfiguration,我看到以下内容:

@Bean
public ZuulController zuulController() {
    return new ZuulController();
}

@Bean
public ServletRegistrationBean zuulServlet() {
    return new ServletRegistrationBean(new ZuulServlet(),
            this.zuulProperties.getServletPattern());
}   

ZuulController 包装 ZuulServlet 并像管理 Spring Controller 一样管理其生命周期。让我感到震惊的是,ZuulConfiguration 类无论如何都使用 ServletRegistrationBean 注册了 servlet。也许我在想错误的事情,但我认为你会做一个或另一个。有人可以解释为什么两者都是必要的吗?

使用此配置,ZuulServlet 是作为真正的 servlet(嵌入式 servlet 容器已知)、控制器(委托给 servlet)还是两者兼而有之?

谢谢,

约书亚

【问题讨论】:

    标签: spring spring-boot spring-cloud


    【解决方案1】:

    来自this commit

    允许 Zuul 代理中的多部分请求流

    事实证明,Zuul 的多部分请求很糟糕 几乎完全来自 Spring 中的 Multipart 处理 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
    

    您需要在 传入的请求。 Chrome 默认不这样做 显然,但我能够用 curl 进行测试,例如

    $ curl -v -H "Transfer-Encoding: chunked" \
      -F "file=@mylarg.iso" \
      localhost:9999/zuul/direct/file
    

    通过 DispatcherServlet 的旧代理路径仍然存在 可用(为了向后兼容和方便 在上下文路径的根目录中具有可用的路径)。

    【讨论】:

    • 好的,观察提交,看起来流量默认通过 DispatcherServlet 路由。如果是这样,我可以在点击 ZuulController 之前利用拦截器。
    • 一个技巧是,如果您使用的是 WebKit 浏览器和标准 JavaScript XMLRequest。它似乎不支持将 Transfer-Encoding 作为安全标头。
    • 这对我来说没有分块传输编码。
    • 我不明白这对于暴露的端点是如何工作的。您如何让单个服务在同一端点上处理正常的休息和多部分?例如api.foobar.com/user上的用户端点和api.foobar.com/user/picture上的大图片上传而不是api.foobar.com/zuul/user/picture
    猜你喜欢
    • 2020-04-15
    • 2023-03-11
    • 1970-01-01
    • 2018-08-25
    • 1970-01-01
    • 2018-08-10
    • 2020-07-19
    • 1970-01-01
    • 2021-09-07
    相关资源
    最近更新 更多