gpt4 book ai didi

java - Spring Webflux Reactor 上下文

转载 作者:太空宇宙 更新时间:2023-11-04 10:35:06 40 4
gpt4 key购买 nike

在以下示例中,test2 应该能够访问 testtest1 中的 context 值,但似乎没有发生这种情况。

欢迎任何见解。

引用文献:

  1. http://projectreactor.io/docs/core/release/reference/#context
  2. https://jira.spring.io/browse/SPR-15680
  3. https://simonbasle.github.io/2018/02/contextual-logging-with-reactor-context-and-mdc/ .

    import reactor.core.publisher.Mono;
    public class Test {

    public static void main(final String[] args) {
    System.out.println(Thread.currentThread().getName()
    + " main "
    + test());
    }

    public static String test() {
    final String key = "message";
    return test1().subscriberContext(ctx -> ctx.put(key, "test")).block();
    }

    public static Mono<String> test1() {
    final String key = "message1";
    return test2().subscriberContext(ctx -> ctx.put(key, "test1 "));
    }

    public static Mono<String> test2() {
    return Mono.just("test2").map(item -> {
    Mono.subscriberContext().map(context -> {
    System.err.println(Thread.currentThread().getName()
    + " test2 "
    + context);
    return context;
    });
    return item;
    });
    }}

输出:

main main test2

最佳答案

我想,您想访问 test2() 中的订阅者上下文,对吧?仅当您实际上处于同一流程中时,这才有效,因此此代码片段将修复原始代码:原文:

public static Mono<String> test2() {
return Mono.just("test2").map(item -> {
// you're creating a new Mono context here, and don't return it/use it anymore
Mono.subscriberContext().map(context -> {
System.err.println(Thread.currentThread().getName()
+ " test2 "
+ context);
return context;
});
return item;
});

已修复(尽可能少的更改,可以美化):

public static Mono<String> test2() {
return Mono.just("test2").flatMap(item -> { // changed map to flatmap, otherwise would be Mono<Mono<String>> here
Mono<Context> contextMono = Mono.subscriberContext()
.map(context -> {
System.err.println(Thread.currentThread()
.getName() + " test2 " + context);
return context;
});
// let item be returned from "inside" of context Mono
return contextMono.map(context -> item);
});

我自己一直在努力处理订阅者上下文 - 我发现它不是很清楚,何时按预期使用上下文,何时不按预期使用。我希望这会有所帮助。

关于java - Spring Webflux Reactor 上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49578877/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com