Mono.flatMap 没有被调用

Mono.flatMap is not getting invoked

我对 Spring 还是个新手,Mono 上的 Webflux 和 flatMap 似乎不起作用。 我有以下功能,但无法调用 kafkaPublisher.publishToTopic。我插入了 print 语句来测试它是否打印了任何东西,它甚至没有执行 print 语句。 publishToTopic returns 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());
           });

}

如果在 flatMap 上调用 .block,它会被调用,如下所示。

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();

}

我发现了我的错误。我在调用此 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()));
}

flatMap 无限期挂起,通过将其转换为未来对象来关闭异步操作的最佳方式。

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