spring - Rest Controller 如何同时处理单个实例应用程序的多个请求?

标签 spring spring-boot microservices

  • 如果在应用程序中同时向单个 RestController 发出多个请求,如何处理不同场景(对单个端点的多个请求(仅 GET),或多个端点的多个请求(GET、POST、PUT.. .))
  • 是否使用了多线程概念?如果是,是否可以以 FIFO 模式处理请求?
  • RestController 可以接受的最大请求是多少?
  • RestController 范围是否会影响请求的处理(具有默认范围单例的请求范围的行为)?
  • 还有它是如何由应用程序上下文处理的(流程示例会有所帮助)

  • 考虑建微服务 Spring Boot 2 .

    最佳答案

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

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

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

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

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

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

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

    关于spring - Rest Controller 如何同时处理单个实例应用程序的多个请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56311512/

    相关文章:

    java - 使用 Spring 从 Controller 层调用存储库和服务

    spring - HTTP 状态 500 - servlet 调度程序的 Servlet.init() 抛出异常

    spring-mvc - spring-boot自定义404错误页面

    java - 微服务和数据库安全

    java - Zuul路由: One endpoint with multiple microservices

    Java:监听远程 Linux 服务器上的目录更改

    java - Spring:同一请求中的JSON数据和文件

    java - 带有 { } 大括号的 Spring MVC @Path 变量

    java - 如何在java中正确检索所有行?

    java - Kubernetes 上微服务之间集群间通信的最佳方式?