-
반응형
Reactor Sequence의 동작 시간을 제어하는 Operator에는 delayElements(), interval(), timeout() 등이 있습니다. 이외 동작 시간 자체를 측정하는 elapsed Operator가 존재합니다.
elapsed
elapsed() Operator는 emit된 데이터 사이의 경과 시간을 측정해서 Tuple<Long, T> 형태로 Downstream에 emit 합니다. emit 되는 첫 번째 데이터는 onSubscribe Signal과 첫 번째 데이터 사이를 기준으로 시간을 측정합니다. 측정된 시간의 단위는 milliseconds 입니다.
다음은 delayElements() Operator를 사용하여 1초에 한 번씩 데이터가 emit 되고, Subscriber는 emit 되는 데이터 사이의 측정 시간과 데이터를 Tuple<Long, T> 형태로 전달 받는 예제 코드입니다.
import lombok.extern.slf4j.Slf4j; import reactor.core.publisher.Flux; import java.time.Duration; /** * 시간 측정 예제 * - elapsed Operator * - emit된 데이터 사이의 경과된 시간을 측정한다. * - emit된 첫번째 데이터는 onSubscribe Signal과 첫번째 데이터 사이의 시간을 기준으로 측정한다. * - 측정된 시간 단위는 milliseconds이다. */ @Slf4j public class Example14_51 { public static void main(String[] args) throws InterruptedException { Flux .range(1, 5) .delayElements(Duration.ofSeconds(1)) .elapsed() .subscribe(data -> log.info("# onNext: {}, time: {}", data.getT2(), data.getT1())); Thread.sleep(6000); } } /** * [실행 결과] * # onNext: 1, time: 1029 * # onNext: 2, time: 1006 * # onNext: 3, time: 1001 * # onNext: 4, time: 1001 * # onNext: 5, time: 1003 */
[참고 정보]
반응형'Spring Reactive Web Application > Project Reactor' 카테고리의 다른 글
다수의 Subscriber에게 Flux를 멀티캐스팅(Multicasting) 하기 위한 Operator (0) 2023.08.10 Flux Sequence 분할을 위한 Operator (0) 2023.08.09 에러 처리를 위한 Operator (0) 2023.08.06 Sequence의 내부 동작 확인을 위한 Operator (0) 2023.08.05 Sequence 변환 Operator (0) 2023.08.05