- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道 subscribeOn 用于在订阅序列时切换执行线程,但我发现它不适用于 ServerRequest.bodyToMono/Flux
有点像
Flux.just(1,2,3)
.doOnNext(integer -> log.info("test {}",integer))
.subscribeOn(Schedulers.elastic())
.subscribe();
将使执行线程发生变化
INFO 23313 --- [ elastic-2] c.a.p.m.f.service.router.TestService : test 1
INFO 23313 --- [ elastic-2] c.a.p.m.f.service.router.TestService : test 2
INFO 23313 --- [ elastic-2] c.a.p.m.f.service.router.TestService : test 3
但让我困惑的是
假设我有一个 Spring WebFlux 路由器:
@Configuration
public class TestRouter {
@Bean
public RouterFunction<ServerResponse> testRouterFunction(TestService testService) {
return route().path("/test", builder -> builder.nest(accept(MediaType.ALL),
route -> route.PUT("/", req -> {
Mono<String> valueMono = req.bodyToMono(String.class);
return ServerResponse.ok().body(testService.test(valueMono), String.class);
}))).build();
}
}
和服务:
@Service
@Slf4j
public class TestService {
public Mono<String> test(Mono<String> mono) {
return mono
.doOnSubscribe(subscription -> log.info("on subscribe"))
.subscribeOn(Schedulers.elastic())
.doOnNext(s -> log.info("received {}", s))
.subscribeOn(Schedulers.elastic());
}
}
基本逻辑是 http 将请求发送到 localhost:port/test 将接收它以纯文本形式发送到服务器的内容
我尝试让 doOnNext 在其他线程上运行,而不是在 Spring WebFlux 的 NIO 线程上运行,无论我放在哪里
subscribeOn
执行线程总是NIO线程:
INFO 23200 --- [ctor-http-nio-4] c.a.p.m.f.service.router.TestService : on subscribe
INFO 23200 --- [ctor-http-nio-4] c.a.p.m.f.service.router.TestService : received test
感谢@MichaelBerry @SimonBaslé,你们帮了我很多,给你们的答案都点赞
简而言之,reactor-netty 将为 http 订阅覆盖 subscribeOn,使用 flatMap()
在不同的 Mono/Flux 上包含一个单独的
或 subscribeOn()
publishOn()
可以完成我想要的工作
最佳答案
这不是您可以更改的东西 - 它只是在 subscribe()
被调用之前链中的最后一个 subscribeOn()
调用是有效的,所以它取决于WebFlux 使用它想要的任何调度程序。在这种情况下,它看起来像是在 NIO 驱动的事件循环或类似事件中处理请求。
但是,您可以在您的链中包含一个 flatMap()
调用,为此您可以指定一个单独的 subscribeOn()
,其中 < em>不会被覆盖。这可能是一个选项,具体取决于您的用例,因为您可以在 flatMap()
调用中定义的发布者中完成大部分工作。
关于java - 在 ServerRequest 的 bodyToMono 上使用它时 subscribeOn 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58337530/
我正在使用 Spring 5 WebClient 进行外部 api 调用,并希望将响应映射到这样的对象: @Data @JsonIgnoreProperties(ignoreUnknown = tru
当 WebClient bodyToMono 遇到空主体时,预期的行为是什么?在我的具体示例中,我们正在检查从 post 调用返回的状态,如果将其转换为我们的自定义错误格式是错误的。如果转换为自定义错
我没有看到这两种方法之间有任何主要的时间复杂度差异,它们都有工作魅力,我想了解这两种方法之间的主要区别是什么 我正在从服务中获取 Student 对象的集合。 bodyToMono 参数化类型引用 p
我是 Spring WebClient 的新手。我有以下方法使用 WebClient 调用端点,并且我需要从此方法返回 ResponseEntity。我知道我可以调用 block(),但是我是否可以以
我知道 subscribeOn 用于在订阅序列时切换执行线程,但我发现它不适用于 ServerRequest.bodyToMono/Flux 有点像 Flux.just(1,2,3)
我正在尝试使用 Webflux 将生成的文件流式传输到另一个位置,但是,如果文件的生成遇到错误,api 会返回成功,但在生成文件时会使用 DTO 详细说明错误,而不是文件本身。这是使用非常陈旧且设计不
我有一个带有 Web 客户端的 Spring 应用程序,可以调用其他 REST 端点。下面是客户端 - @Override public Mono searchPrincipalsByResource
我是一名优秀的程序员,十分优秀!