Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 弹簧靴&x2B;webflux:并行运行某些步骤时上下文丢失_Java_Spring Boot_Spring Webflux_Project Reactor - Fatal编程技术网

Java 弹簧靴&x2B;webflux:并行运行某些步骤时上下文丢失

Java 弹簧靴&x2B;webflux:并行运行某些步骤时上下文丢失,java,spring-boot,spring-webflux,project-reactor,Java,Spring Boot,Spring Webflux,Project Reactor,弹簧靴:2.1.3.1释放 你好 我试图使用SpringWebFlux的上下文特性来携带一个简单的变量。我有一个WebFilter设置了这样一个变量的上下文,我尝试在我的流量/流的不同阶段在我的控制器中使用它。在调用Flux类的方法“parallel()”之后,我会丢失它 过滤器: 公共类TestFilter实现WebFilter{ 私有记录器LOG=LoggerFactory.getLogger(TestFilter.class); @凌驾 公共Mono筛选器(服务器WebExchange

弹簧靴:2.1.3.1释放

你好

我试图使用SpringWebFlux的上下文特性来携带一个简单的变量。我有一个WebFilter设置了这样一个变量的上下文,我尝试在我的流量/流的不同阶段在我的控制器中使用它。在调用Flux类的方法“parallel()”之后,我会丢失它

  • 过滤器:
公共类TestFilter实现WebFilter{
私有记录器LOG=LoggerFactory.getLogger(TestFilter.class);
@凌驾
公共Mono筛选器(服务器WebExchange exchange、WebFilterChain链){
返回链。过滤器(交换)
.doOnEach(voidSignal->System.out.println(“过滤器:”+voidSignal.getContext().getOrEmpty(“blob”))).subscriberContext(Context.of(“blob”、“kapoue”));
}
}
  • 控制员:
@RestController
@RequestMapping(TestControllerWebFlux.ROOT)
公共类TestControllerWebFlux{
静态最终字符串ROOT=“/flux”;
静态最终字符串测试=“/TEST”;
private WebClient WebClient=WebClient.create();
@GetMapping(
值=测试,
products={MediaType.APPLICATION_JSON_VALUE})
公共单声道测试(){
System.out.println(“controller1:+Thread.currentThread());
Flux 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”))
.减少((s,s2)->s+s2)
.doOnEach(stringSignal->System.out.println(“controller5:”+stringSignal.getContext().getOrEmpty(“blob”))
.map(s->{
System.out.println(“controller6:+Thread.currentThread());
返回s;
});
}
@GetMapping(
value=“test2”,
products={MediaType.APPLICATION_JSON_VALUE})
公共流量测试2(){
返回流量。just(新结果(“0”)、新结果(“0”)、新结果(“0”);
}
@资料
@AllArgsConstructor
@诺尔格构装师
公共静态类结果{
私有字符串值;
}
}
我所做的就是调用端点,我得到:

控制器1:线程[reactor-http-nio-2,5,main] 控制器2:可选[kapoue] 控制器3:可选。空 控制器4:可选。空 控制器2:可选[kapoue] 控制器3:可选。空 控制器4:可选。空 控制器2:可选[kapoue] 控制器3:可选。空 控制器4:可选。空 控制器2:可选[kapoue] 控制器3:可选。空 控制器4:可选。空 控制器3:可选。空 控制器4:可选。空 控制器3:可选。空 控制器4:可选。空 控制器3:可选。空 控制器4:可选。空 控制器5:可选[kapoue] 控制器6:线程[reactor-http-nio-2,5,main] 过滤器:可选[kapoue]

正如您所见,上下文在“parallel”方法之后立即丢失,并且在减少后以某种方式返回

这是一个bug还是我不应该在这样的调用之后尝试并行运行


提前感谢您的帮助。

这看起来像是反应堆中的一个bug。我报告说:

。。。并固定在。上下文没有丢失,只是
。doOnEach
没有设置您接收的
信号对象。