netty - Spring Webflux / Reactor 发布调用线程
问题描述
所以我知道 Spring WebFlux 和 Reactor 在后台使用 netty for nio,现在我想释放调用线程以释放资源以处理更多请求。下面的简单代码是释放调用线程吗?
@GetMapping("/foo")
public Mono<Void> bar() {
someService.veryLongSyncOperation();
return Mono.empty();
}
我没有将服务调用包装在 Flux/Mono 中,我只是想首先验证调用线程是否在服务完成长时间工作时被释放。这足以实现调用线程释放吗?如果是这样,有没有办法测试这个?
我在想框架看到了返回类型,这足以让它知道它必须释放调用线程。
解决方案
您可以使用反应堆参考指南.subscribeOn(Schedulers.elastic())
中提到的
@GetMapping("/foo")
public Mono<Void> bar() {
return Mono.fromCallable(() -> someService.veryLongSyncOperation())
.subscribeOn(Schedulers.elastic())
.then();
}
每个订阅都将发生在来自 Schedulers.elastic() 的专用单线程工作人员上。
更新:现在有Schedulers.boundedElastic()
调度程序。我建议默认使用它。
推荐阅读
- javascript - nodejs内存泄漏:进程使用量增加超过堆
- django - 为什么会抛出错误?`forms.py 无法从 models.py 导入模型`
- functional-programming - APL - 如何在字符串向量中找到最长的单词?
- function - 如何在 Haskell 中将 main :: IO () 重写为由一个 main :: IO() 组成的两个函数
- typescript - 禁用默认的打字稿转换器
- r - 在 ggplot2 中分组时直方图不正确
- java - sql查询检查现有记录
- excel - 将文件夹中的多种文件类型(pdf、jpg、png 或 txt)转换为 PDF - Excel VBA
- c++ - 如何使用卡尔曼滤波器估计 OpenCV 中的变量?
- javascript - Javascript删除“焦点”事件监听器