package com.myoa.engineering.crawl.ppomppu.receiver.infrastructure.client; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.ParameterizedTypeReference; import org.springframework.stereotype.Component; import org.springframework.web.reactive.function.client.WebClient; import org.springframework.web.reactive.function.client.WebClientRequestException; import com.myoa.engineering.crawl.ppomppu.support.dto.code.PpomppuBoardName; import lombok.extern.slf4j.Slf4j; import reactor.core.publisher.Mono; import reactor.core.scheduler.Schedulers; @Slf4j @Component public class ProcessorAPIWebClient { private final WebClient webClient; public ProcessorAPIWebClient(WebClient.Builder webClientBuilder, @Value("${webclient.base-url}") String baseUrl) { this.webClient = webClientBuilder.baseUrl(baseUrl) .build(); } public Mono emitParseEvent(PpomppuBoardName boardName) { return webClient.post() .uri("/api/v1/crawl/boards/{boardName}", boardName) .exchangeToMono(e -> e.bodyToMono(new ParameterizedTypeReference() {})) .publishOn(Schedulers.boundedElastic()) .onErrorResume(WebClientRequestException.class, t -> { log.info("Exception occured, ignoring. : {}", t.getClass().getSimpleName()); return Mono.empty(); }); } }