首页 > 解决方案 > Mono.flatMap 没有被调用

问题描述

我还是 Spring Webflux 的新手,Mono 上的 flatMap 似乎不起作用。我有以下功能并且对kafkaPublisher.publishToTopic的调用不起作用。我插入了 print 语句来测试它是否打印任何东西,它甚至不执行 print 语句。publishToTopic返回Mono<Void>

private Mono<Void> test(Long gId, UUID pId) {
    Mono<UUID> nId = pDao.findNId(pId);
    Mono<List<String>> channels = nId.flatMapMany(pDao::findChannels).collectList();
    return Mono.zip(nId, channels)
           .flatMap(t -> {
               System.out.println(t.getT1());
               return kafkaPublisher.publishToTopic(gId, t.getT1().toString(), t.getT2());
           });

}

如果被调用,它会被调用.blockflatMap如下所示。

private Mono<Void> test(Long gId, UUID pId) {
    Mono<UUID> nId = pDao.findNId(pId);
    Mono<List<String>> channels = nId.flatMapMany(pDao::findChannels).collectList();
    Mono.zip(nId, channels)
           .flatMap(t -> {
               System.out.println(t.getT1());
               return kafkaPublisher.publishToTopic(gId, t.getT1().toString(), t.getT2());
           }).block();
    return Mono.empty();

}

标签: javaspringspring-bootspring-webflux

解决方案


我发现了我的错误。我没有使用调用此方法test的函数中任何地方的结果。test这是我用来调用的代码test

public Mono<Void> saveNew(NewPre pre) {
    preDao.insert(pre)
                        .flatMap(p -> test(p.pId(), p.nId()));
    return Mono.empty();
}

我将其更改为以下,并且可以正常工作。

public Mono<Void> saveNew(NewPre pre) {
    return preDao.insert(preference)
                        .flatMap(p -> test(p.p(), p.n())
                            .then(Mono.empty()));
}

推荐阅读