'How to convert Mono object without blocking?
Suppose I have this method:
public static Mono<String> getData2() {
return Mono.just("7");
}
I want to call this method, get back the string, convert that string to an Integer 7, and then return that integer in a non-blocking way. How can I do this?
I've tried this, but the map
function is blocking (synchronous):
public static Mono<Integer> getData1() {
return getData2().map(data -> Integer.parseInt(data));
}
I tried using flatMap
instead (asynchronous):
public static Mono<Integer> getData1() {
return getData2().flatMap(data -> Integer.parseInt(data));
}
But then I get this error: Type mismatch: cannot convert from int to Mono<? extends Integer>
So what can I do?
Solution 1:[1]
In Spring-reactor, operations, such as Mono.just
, Mono.map
and so on, are lazy evaluation. Nothing happens until subscribe
.
Blocking usually occurs in network calling or resource locking. It's another concept.
If you want a asynchronous Mono
, Mono.defer
may be help. And subscribeOn
can be used to do resource isolation.
Back to the question, Mono.just("7").map(Integer::parseInt)
just gives you a mono object. In asynchronous way, we can change this to Mono.defer(() -> Mono.just("7").map(Integer::parseInt))subscribeOn(Schedulers.newBoundedElastic(xxxx))
. But this may be unnecessary and meanless.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 |