spring - 如何设计一个可以每秒处理 1k 个请求的 Spring Boot 应用程序
问题描述
我有一个休息控制器,它接受发布请求并返回操作是否成功的状态。它适用于每秒 100 个请求,因为我在其底层有多个操作,最终发送响应。
可能有数百个用户试图将请求发送到控制器,因此这一切都使用可完成的未来和 http Async 调用程序完成。当每秒有 1000 个请求然后控制器线程耗尽时,就会出现问题,因为已经有多个线程处理多个请求并且所有线程都在等待未来完成然后发送响应。
如何让我的休息控制器能够每秒处理 1000 个请求而不会中断。
解决方案
已经有多个线程处理多个请求,并且都在等待将来完成,然后发送响应。
实际上,您可以通过让控制器返回一个CompletableFuture
. 只需将服务返回的调用链接起来,CompletableFuture
即可将它们转换为适当的响应,而不是使用get()
or join()
:
@RequestMapping
public CompletableFuture<ResponseEntity<…>> processRequest() {
return myService.getStatusFuture()
.thenApply(status -> convertToResponseEntity(status));
}
当然,要使其正常工作,您应该拥有真正的异步服务。如果您正在使用@Async
或提交任务CompletableFuture.supplyAsync()
,这只会将问题从 HTTP 线程池转移到另一个线程池。
推荐阅读
- arrays - 在C语言中输入50个字符到一个字符串中
- select - antd 多选渲染问题
- typescript - 量角器:将自定义定位器添加到全局命名空间
- javascript - 通过 Jimp(node.js 模块)合成图像时,它返回一个空白图像而不是合成图像
- python - 如何添加将小数转换为分数,然后将其添加到列表中?
- python - 在 AWS Glue 开发终端节点上对 PyCharm 中的远程调试问题进行故障排除
- suffix - 仅在某些项目上自定义后缀哈希
- ios - 设置 tableView 数据源导致应用程序崩溃
- python - 尝试在 python 脚本中安装 python 包
- python - 我是 Tkinter python 新手,在 Python 中使用 Tkinter 创建顶级窗口时遇到问题