final StopWatch stopWatch = new StopWatch();
stopWatch.start();
for (int i = 0; i < 3; i++) {
final ResponseEntity<String> response =
restTemplate.exchange(THREE_SECOND_URL, HttpMethod.GET, HttpEntity.EMPTY, String.class);
assertThat(response.getBody()).contains("success");
}
stopWatch.stop();
System.out.println(stopWatch.getTotalTimeSeconds());
3s 3번 -> 9.xxs
final StopWatch stopWatch = new StopWatch();
stopWatch.start();
for (int i = 0; i < LOOP_COUNT; i++) {
this.webClient
.get()
.uri(THREE_SECOND_URL)
.retrieve()
.bodyToMono(String.class)
.subscribe(it -> {
count.countDown();
System.out.println(it);
});
}
count.await(10, TimeUnit.SECONDS);
stopWatch.stop();
System.out.println(stopWatch.getTotalTimeSeconds());
3.xxs
boot1 : restTemplate 사용
boot2 : webClient 사용
WebClient.create();
WebClient.create(String baseUrl);
default 값이나 filter 또는 ConnectionTimeOut 같은 값을 지정하여 생성하기 위해서는 Builder 클래스를 통해 생성
Webclient client = WebClient
.builder()
.baseUrl("http://localhost:8080")
.defaultCookie("쿠키키","쿠키값")
.defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
.build();
WebClient client = WebClient.create("https://example.org");
Mono<Person> result = client.get()
.uri("/persons/{id}", id).accept(MediaType.APPLICATION_JSON)
.retrieve()
.bodyToMono(Person.class);
}
: reactive stream 인터페이스 중에서 데이터(시퀀스)를 제공하는 구현체
Flux<Integer> seq = Flux.just(1, 2, 3);
Flux.just(1, 2, 3);
--1-2-3-|→ 이처럼 1, 2, 3 세개의 next신호를 발생하고 마지막에 complete 신호를 발생시켜 시퀀스를 끝낸다.
Flux<Integer> seq = Flux.just(1, 2, 3);
seq.subscribe(v -> System.out.println("첫번 째 요청: " + v));
seq.subscribe(v -> System.out.println("두번 째 요청: " + v));
첫번 째 요청: 1
첫번 째 요청: 2
Person person = client.get()
.uri("/person/{id}", i).retrieve()
.bodyToMono(Person.class)
.block();