0개 또는 1개의 데이터를 emit하는 Publisher이다(Compare with RxJava Maybe)
Data Emit 과정에서 에러가 발생하면 OnError Signal을 Emit 한다

Mono.just("Hello, Reactor!")
.subscribe(data -> log.info("# emitted data: {}", data));
Mono.empty()
.subscribe(
data -> log.info("# emitted data: {}", data),
error -> {},
() -> log.info("# emitted onComplete Signal")
);
URI worldTimeUri = UriComponentsBuilder.newInstance()
.scheme("https")
.host("worldtimeapi.org")
.port(443)
.path("api/timezone/Asia/Seoul")
.build()
.encode()
.toUri();
RestTemplate restTemplate = new RestTemplate();
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
Mono.just(
restTemplate.exchange(worldTimeUri, HttpMethod.GET, new HttpEntity<>(httpHeaders), String.class)
)
.map(response -> {
DocumentContext jsonContext = JsonPath.parse(response.getBody());
return jsonContext.<String>read("$.datetime");
})
.subscribe(
data -> log.info("# emitted data: {}", data),
error -> log.error(error.getMessage(), error),
() -> log.info("# emitted onComplete Signal")
);
0개 ~ N개의 데이터를 Emit 하는 Publisher 이다
데이터 Emit 과정에서 에러가 발생하면 onError Signal을 Emit 한다

Flux.just(6, 9, 13)
.map(num -> num%2)
.subscribe(remainder -> log.info("# remainder: {}", remainder));
Flux.fromArray(new Integer[] {3, 6, 7, 9})
.filter(num -> num > 6)
.map(num -> num*2)
.subscribe(multiply -> log.info("# multiplied: {}", multiply));
Flux<Object> flux = Mono.justOrEmpty(null).concatWith(Mono.justOrEmpty("Jobs"));
flux.subscribe(data -> log.info("# emitted data: {}", data));
Flux.concat(
Flux.just("Venus"),
Flux.just("Earth"),
Flux.just("Mars")
)
.collectList()
.subscribe(planetList -> log.info("# planets: {}", planetList));