【问题标题】:How Rest Controller handle multiple request at same time for a single instance application?Rest Controller 如何同时处理单个实例应用程序的多个请求?
【发布时间】:2019-10-12 04:05:19
【问题描述】:
  1. 如果在应用程序中同时向单个 RestController 发送多个请求,如何处理不同场景(对单个端点的多个请求(仅 GET),或对多个端点的多个请求(GET、POST、放...))
  2. 是否使用了多线程概念?如果是,是否可以以 FIFO 模式处理请求?
  3. RestController 可以接受的最大请求是多少?
  4. RestController 范围是否影响请求的处理(默认范围单例的请求范围的行为)?
  5. 还有应用程序上下文如何处理它(带有流的示例会有所帮助)

考虑使用 Spring Boot 2 构建 微服务

【问题讨论】:

    标签: spring spring-boot microservices


    【解决方案1】:

    从 Spring(应用程序上下文)的角度来看,如果没有另外指定,rest 控制器是一个单例。

    所以控制器的代码必须准备好被多个线程同时调用。

    当一个新请求到达服务器时,在传统的每个请求线程模型中,Web 服务器(如 tomcat)负责从预定义的线程池中为请求分配一个线程。然后请求由控制器在该线程的上下文中处理。

    实际的线程池实现通常会因服务器而异,但一般来说,它是可以配置的(每个循环的线程数,如果池已满,则存储请求以供将来处理的队列大小等。 )

    现在关于 RestController 的范围。如果控制器是无状态的(在很多情况下应该是,保持单例)。如果您需要为每个请求创建新的控制器实例,请更改范围。显然,每个线程都必须使用相同的(在单例范围的情况下)rest 控制器实例,或者如果您指定另一个范围,spring mvc 将创建一个新的控制器实例。

    以上所有答案都适用于“传统”线程每个请求的模型。

    请注意,由于 spring 5 / spring boot 2 spring 还支持带有 webflux 的“Reactive”模型。它在 netty 之上工作,不使用每请求线程模型。如果您对这个模型而不是我试图简要描述的传统模型感兴趣,请在问题中说明。

    【讨论】:

    • 感谢@mark 的传统模型简介,在我的场景中,我正在使用 Spring Boot 2 版本实现微服务,因此我正在使用带有 webflux 的“反应式”模型(不知道它如何处理请求)。你能简单介绍一下这个模型吗?
    • 与默认范围(单例)相比,RestController 将如何处理请求范围
    猜你喜欢
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    • 2018-04-04
    • 2022-01-21
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    相关资源
    最近更新 更多