[Reactor Practice] Request

kimchj·2024년 3월 5일

Reactor

목록 보기
6/11

1. request()

subscriber가 publisher로 부터 받을 데이터의 개수를 조절, request 함수의 인자로 전달된 값 만큼 publisher에 요청하고 publisher는 요청 개수 만큼 subscriber에게 데이터 전달(단 publisher가 가진 데이터의 수가 요청 수가 보다 적으면 가진 데이터만 전달)

2. log()

이벤트가 발생한 로그 출력

Request Reactor Practice

package io.pivotal.literx;

//generic imports to help with simpler IDEs (ie tech.io)
import java.util.*;
import java.util.function.*;
import java.time.*;

import io.pivotal.literx.domain.User;
import io.pivotal.literx.repository.ReactiveRepository;
import io.pivotal.literx.repository.ReactiveUserRepository;
import reactor.core.publisher.Flux;
import reactor.test.StepVerifier;

/**
 * Learn how to control the demand.
 *
 * @author Sebastien Deleuze
 */
public class Part06Request {

	ReactiveRepository<User> repository = new ReactiveUserRepository();

//========================================================================================

	// TODO Create a StepVerifier that initially requests all values and expect 4 values to be received
	StepVerifier requestAllExpectFour(Flux<User> flux) {
		return StepVerifier.create(flux)
                           .expectNextCount(4)
                           .expectComplete();
	}

//========================================================================================

	// TODO Create a StepVerifier that initially requests 1 value and expects User.SKYLER then requests another value and expects User.JESSE then stops verifying by cancelling the source
	StepVerifier requestOneExpectSkylerThenRequestOneExpectJesse(Flux<User> flux) {
		return StepVerifier.create(flux)
                           .expectNext(User.SKYLER)
                           .thenRequest(1)
                           .expectNext(User.JESSE)
                           .thenCancel();

	}

//========================================================================================

	// TODO Return a Flux with all users stored in the repository that prints automatically logs for all Reactive Streams signals
	Flux<User> fluxWithLog() {
		return repository.findAll().log();
	}

//========================================================================================

	// TODO Return a Flux with all users stored in the repository that prints "Starring:" at first, "firstname lastname" for all values and "The end!" on complete
	Flux<User> fluxWithDoOnPrintln() {
		return repository.findAll()
                  .doOnSubscribe(sub -> System.out.println("Starring:"))
                  .doOnNext(user -> System.out.println(user.getFirstname() + " " + user.getLastname()))
                  .doOnComplete(() -> System.out.println("The end!"));
	}

}
profile
ㅎㅇ

0개의 댓글