Ana*_*mar 5 spring spring-boot microservices
考虑使用Spring Boot 2构建微服务。
从Spring(应用程序上下文)的角度来看,如果没有另外指定,其余控制器是一个单例。
因此控制器的代码必须准备好被多个线程同时调用。
当新请求到达服务器时,在传统的每个请求线程模型中,Web 服务器(如 tomcat)负责从预定义的线程池中为该请求分配一个线程。然后控制器在此线程的上下文中处理该请求。
实际的线程池实现通常因服务器而异,但一般来说,它是可以配置的(每个循环的线程数、在池已满时存储请求以供将来处理的队列大小等)
现在讨论 RestController 的范围。如果控制器是无状态的(在很多情况下应该是这样,只需保持其单例)。如果您需要为每个请求创建新的控制器实例,请更改范围。显然,每个线程都必须使用相同的(在单例范围的情况下)剩余控制器实例,或者如果您指定另一个范围,则 spring mvc 将创建一个新的控制器实例。
上面的所有答案都适用于“传统”每个请求线程模型。
请注意,从 spring 5 / spring boot 2 开始,spring 还支持带有 webflux 的“反应式”模型。它在 netty 之上工作,不使用每个请求线程模型。请在问题中注明您是否对此模型而不是我试图简要描述的传统模型感兴趣。
| 归档时间: |
|
| 查看次数: |
7399 次 |
| 最近记录: |