
io.scalecube.services.examples.GreetingServiceImpl Maven / Gradle / Ivy
package io.scalecube.services.examples;
import java.time.Duration;
import java.util.stream.LongStream;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import reactor.core.scheduler.Schedulers;
public class GreetingServiceImpl implements GreetingService {
@Override
public Mono one(String name) {
return Mono.defer(() -> Mono.just("Echo:" + name));
}
@Override
public Flux manyStream(Long cnt) {
return Flux.defer(
() -> Flux.fromStream(LongStream.range(0, cnt).boxed()).publishOn(Schedulers.parallel()));
}
@Override
public Mono failingOne(String name) {
return Mono.defer(() -> Mono.error(new RuntimeException(name)));
}
@Override
public Flux many(String name) {
return Flux.defer(
() -> Flux.interval(Duration.ofMillis(100)).map(i -> "Greeting (" + i + ") to: " + name));
}
@Override
public Flux failingMany(String name) {
return Flux.defer(
() ->
Flux.push(
sink -> {
sink.next("Echo:" + name);
sink.next("Echo:" + name);
sink.error(new RuntimeException("Echo:" + name));
}));
}
@Override
public Mono pojoOne(GreetingRequest request) {
return Mono.defer(() -> one(request.getText()).map(GreetingResponse::new));
}
@Override
public Flux pojoMany(GreetingRequest request) {
return Flux.defer(() -> many(request.getText()).map(GreetingResponse::new));
}
@Override
public Mono emptyOne(String name) {
return Mono.empty();
}
@Override
public Flux emptyMany(String name) {
return Flux.empty();
}
@Override
public Mono neverOne(String name) {
return Mono.never();
}
@Override
public Mono delayOne(String name) {
return Mono.defer(() -> Mono.delay(Duration.ofSeconds(1)).then(Mono.just(name)));
}
@Override
public Flux delayMany(String name) {
return Flux.defer(
() -> Flux.interval(Duration.ofMillis(500), Duration.ofSeconds(2)).map(i -> name));
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy