我正在嘗試使用春季webflux的上下文功能來攜帶一個簡單的變量。我有一個WebFilter設置了一個具有此類變量的上下文,我嘗試在通量/流的不同階段在我的控制器中使用它。在某些時候,我在調用 Flux 類的方法“parallel()”后丟失了它。過濾器:public class TestFilter implements WebFilter { private Logger LOG = LoggerFactory.getLogger(TestFilter.class); @Override public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) { return chain.filter(exchange) .doOnEach(voidSignal -> System.out.println("filter:"+voidSignal.getContext().getOrEmpty("blob"))).subscriberContext(Context.of("blob", "kapoue")); }}控制器:@RestController@RequestMapping(TestControllerWebFlux.ROOT)public class TestControllerWebFlux { static final String ROOT = "/flux"; static final String TEST = "/test"; private WebClient webClient = WebClient.create(); @GetMapping( value = TEST, produces = {MediaType.APPLICATION_JSON_VALUE}) public Mono<String> test() { System.out.println("controller1:"+Thread.currentThread()); Flux<String> call = webClient.get().uri("http://localhost:" + 8080 + ROOT + "/test2").retrieve().bodyToFlux(Result.class).map(Result::getValue); return call.map(s -> s+"0") .doOnEach(stringSignal -> System.out.println("controller2:"+stringSignal.getContext().getOrEmpty("blob"))) .parallel() .doOnEach(stringSignal -> System.out.println("controller3:"+stringSignal.getContext().getOrEmpty("blob"))) .map(s -> s+"0") .doOnEach(stringSignal -> System.out.println("controller4:"+stringSignal.getContext().getOrEmpty("blob"))) .reduce((s, s2) -> s+s2) .doOnEach(stringSignal -> System.out.println("controller5:"+stringSignal.getContext().getOrEmpty("blob"))) .map(s -> { System.out.println("controller6:"+Thread.currentThread()); return s; }); }
1 回答

慕妹3146593
TA貢獻1820條經驗 獲得超9個贊
這看起來像反應堆中的一個錯誤。我報告了它:https://github.com/reactor/reactor-core/issues/1656
添加回答
舉報
0/150
提交
取消