Java Mono.subscriberContext()返回旧上下文
我有一个PublishContext类,其方法为context(),如下所示:Java Mono.subscriberContext()返回旧上下文,java,reactive-programming,spring-webflux,project-reactor,Java,Reactive Programming,Spring Webflux,Project Reactor,我有一个PublishContext类,其方法为context(),如下所示: public static Mono<Object> context(){ return Mono.empty().subscriberContext( context -> { Context context1 = context.put("key", "hello"); System.out.println((String) context1.get("
public static Mono<Object> context(){
return Mono.empty().subscriberContext( context -> {
Context context1 = context.put("key", "hello");
System.out.println((String) context1.get("key"));
return context1;
});
}
publicstaticmonocontext(){
返回Mono.empty().subscriberContext(上下文->{
Context.put(“key”,“hello”);
System.out.println((String)context1.get(“key”);
返回上下文1;
});
}
在上面的代码中,上下文对象是Context0@744而context1是Context@747这是可以理解的,因为上下文是不可变的,并且总是返回一个新上下文
在我的主类中,我有以下代码:
public static void main(String[] args) {
Mono<Object> objectMono = PublishContext.context();
objectMono.subscribe();
Mono<Object> objectMono1 = Mono.subscriberContext().flatMap(context -> {
System.out.println((String) context.get("key"));
return Mono.empty();
});
objectMono1.subscribe();
}
publicstaticvoidmain(字符串[]args){
Mono objectMono=PublishContext.context();
objectMono.subscribe();
Mono objectMono1=Mono.subscriberContext().flatMap(上下文->{
System.out.println((String)context.get(“key”);
返回Mono.empty();
});
objectMono1.subscribe();
}
在这里,我得到了上下文作为Context0@744,即旧上下文,因此,获取“上下文为空”异常。有人能解释一下这种行为吗?另外,我如何访问context0@747我正在从context()方法返回哪个?- A)
写入需要是同一个数据链的一部分 操作员上下文
- B) 它需要位于所需零件的“下游” 读它
Mono.empty()
)、Context
写入(.subscriberContext(…)
)和订阅的最后一步(objectMono.subscribe()
)的“自包含”序列没有多大意义
也许可以尝试将context()
转换为装饰方法
public static <T> Mono<T> addContext(Mono<T> source){
return source.subscriberContext( context -> {
Context context1 = context.put("key", "Hello");
System.out.println((String) context1.get("key"));
return context1;
});
}
- A)
写入需要是同一个数据链的一部分 操作员上下文
- B) 它需要位于所需零件的“下游” 读它
Mono.empty()
)、Context
写入(.subscriberContext(…)
)和订阅的最后一步(objectMono.subscribe()
)的“自包含”序列没有多大意义
也许可以尝试将context()
转换为装饰方法
public static <T> Mono<T> addContext(Mono<T> source){
return source.subscriberContext( context -> {
Context context1 = context.put("key", "Hello");
System.out.println((String) context1.get("key"));
return context1;
});
}
fooUNKNOWN
fooHello