第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

subscribeOn 在 ServerRequest 的 bodyToMono 上使用時不起作用

subscribeOn 在 ServerRequest 的 bodyToMono 上使用時不起作用

千巷貓影 2023-10-13 10:08:45
我知道 subscribeOn 用于在訂閱序列時切換執(zhí)行線程,但我發(fā)現(xiàn)它不適用于 ServerRequest.bodyToMono/Flux就像是Flux.just(1,2,3)          .doOnNext(integer -> log.info("test {}",integer))          .subscribeOn(Schedulers.elastic())          .subscribe();會使執(zhí)行線程改變INFO 23313 --- [      elastic-2] c.a.p.m.f.service.router.TestService     : test 1INFO 23313 --- [      elastic-2] c.a.p.m.f.service.router.TestService     : test 2INFO 23313 --- [      elastic-2] c.a.p.m.f.service.router.TestService     : test 3但令我困惑的是假設(shè)我有一個 Spring WebFlux 路由器:@Configurationpublic 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();    }}和一個服務(wù):@Service@Slf4jpublic 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 put 請求到 localhost:port/test 將接收以純文本形式發(fā)送到服務(wù)器的內(nèi)容我嘗試讓 doOnNext 在其他線程而不是 Spring WebFlux 的 NIO 線程上運行,無論我放在哪里subscribeOn執(zhí)行線程始終是 NIO 線程:INFO 23200 --- [ctor-http-nio-4] c.a.p.m.f.service.router.TestService     : on subscribeINFO 23200 --- [ctor-http-nio-4] c.a.p.m.f.service.router.TestService     : received test感謝@MichaelBerry @SimonBaslé,你們倆都幫了我很多忙,對你們的答案都投贊成票簡而言之,reactor-netty 將覆蓋 http 訂閱的 subscribeOn,使用 aflatMap()包含一個單獨的subscribeOn()on 不同的Mono/Flux或publishOn()可以完成我想要的工作
查看完整描述

1 回答

?
白衣非少年

TA貢獻1155條經(jīng)驗 獲得超0個贊

subscribeOn()這不是您可以更改的內(nèi)容 - 它只是調(diào)用之前調(diào)用的鏈中的最后一個調(diào)用subscribe(),因此由 WebFlux 決定使用它想要的任何調(diào)度程序。在本例中,它看起來像是在 NIO 驅(qū)動的事件循環(huán)或類似循環(huán)中處理請求。

但是,您可以flatMap()在鏈中包含一個調(diào)用,并為其指定subscribeOn()一個不會被覆蓋的單獨調(diào)用。這可能是一個選項,具體取決于您的用例,因為您可以在調(diào)用中定義的發(fā)布者中完成大部分工作flatMap()。


查看完整回答
反對 回復(fù) 2023-10-13
  • 1 回答
  • 0 關(guān)注
  • 244 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號