Ich benutze Spring Reactor 3.1.0.M3 und habe einen Anwendungsfall, wo ich Monos aus mehreren Quellen zusammenführen muss. Ich fand, dass, wenn eines der Monos ein leeres Mono ist, zip ohne Fehler fehlschlägt.Spring Reactor: Mono.zip schlägt auf leer Mono
Beispiel:
Mono<String> m1 = Mono.just("A");
Mono<String> m2 = Mono.just("B");
Mono<String> m3 = Mono.empty();
Mono<String> combined = Mono.zip(strings -> {
StringBuffer sb = new StringBuffer();
for (Object string : strings) {
sb.append((String) string);
}
return sb.toString();
}, m1, m2, m3);
System.out.println("Combined " + combined.block());
Wenn m3 zugesetzt wird, wird der Kombinator in der Antwort übersprungen ist null. Wenn ich m3 entferne, funktioniert alles wie erwartet und "AB" wird zurückgegeben. Gibt es eine Möglichkeit, das zu umgehen, indem ich das leere Mono erkenne? Gibt es auch eine Möglichkeit, dass die Kombinator-Methode den Typ des Objekts kennt, anstatt zu casten?
für eine kleine Anzahl von Mono gibt es Mono.when (wir denken darüber nach, das in 3.1.0 zu ändern). Es wird nicht das Empy-wenn-eine-Quelle-leere Verhalten obwohl ... –
Ich habe nur 3 Monos in diesem Beispiel, aber in der tatsächlichen Code verwende ich Iterable. Also wäre es nützlich, wenn ich leere Monos herausfiltern oder irgendwie damit umgehen könnte. Im Moment löst sich das kombinierte Mono auf Null auf, ohne dass die Ursache angegeben wird. Wenn Monos von mehreren Quellen produziert werden, gibt es keine Garantie, dass keine leer sein würde. – athom