From 75652b61497aa7d93fde17e62a2fab716b1ba9ca Mon Sep 17 00:00:00 2001 From: Jungseok Sung Date: Mon, 1 Apr 2024 18:00:57 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20Connection=20Prematurely=20Closed=20issu?= =?UTF-8?q?e=20=EB=8C=80=EC=9D=91=20=EC=9E=91=EC=97=85=20(#987)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit slack 서버의 네트워크 관련 구성, 설정등을 알 수 없음. 따라서, Reactor Netty Docs(https://projectreactor.io/docs/netty/1.0.21/reference/index.html\#faq.connection-closed) 의 내용을 토대로 추정하여 대응한다. --- .../zzimkkong/service/SlackService.java | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/backend/src/main/java/com/woowacourse/zzimkkong/service/SlackService.java b/backend/src/main/java/com/woowacourse/zzimkkong/service/SlackService.java index 8f3d23c52..5fe5e410c 100644 --- a/backend/src/main/java/com/woowacourse/zzimkkong/service/SlackService.java +++ b/backend/src/main/java/com/woowacourse/zzimkkong/service/SlackService.java @@ -4,10 +4,14 @@ import com.woowacourse.zzimkkong.dto.slack.SlackResponse; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.MediaType; +import org.springframework.http.client.reactive.ReactorClientHttpConnector; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.reactive.function.client.WebClient; +import reactor.netty.http.client.HttpClient; +import reactor.netty.resources.ConnectionProvider; +import java.time.Duration; import java.util.Objects; @Service @@ -19,7 +23,14 @@ public class SlackService { public SlackService(@Value("${service.url}") final String titleLink, final WebClient webClient) { this.titleLink = titleLink; - slackWebClient = webClient; + ConnectionProvider provider = ConnectionProvider.builder("slack-pool") + .maxConnections(10) + .maxIdleTime(Duration.ofSeconds(2L)) + .maxLifeTime(Duration.ofSeconds(2L)) + .lifo() + .build(); + HttpClient httpClient = HttpClient.create(provider); + slackWebClient = webClient.mutate().clientConnector(new ReactorClientHttpConnector(httpClient)).build(); } public void sendCreateMessage(SlackResponse slackResponse) { @@ -39,10 +50,8 @@ public void sendDeleteMessage(SlackResponse slackResponse) { private void send(final Attachments attachments, final String slackUrl) { if (!Objects.isNull(slackUrl)) { - slackWebClient.mutate() - .baseUrl(slackUrl) - .build() - .post() + slackWebClient.post() + .uri(slackUrl) .contentType(MediaType.APPLICATION_JSON) .bodyValue(attachments.toString()) .retrieve()