반응형
스프링에서 okhttp3 를 사용중 로그에 다음과 같은 오류 메시지가 떴다.
okhttp3 사용 중에 간헐적으로 unexpected end of stream on [주소] 가 나왔다.
request 를 요청받는 서버 설정마다 다른 것 같다.
해당 원인은
요청받는 서버의 keep_alive timeout 이 okhttp 로 요청하는 클라이언트 서버보다 timeout 시간이 낫기 떄문이다.
다시 말하면 클라이언트 서버가 timeout 이 받아주는 서버 timout 보다 길다.
나의 경우는 Okhttp3 로 요청하고 나서 프로세스가 조금 긴 경우에 다음과 같은 현상이 나왔다.
클라이언트가 서버에서 데이터를 받고나서 서버의 keep_alive timeout 시간이 지났음에도 클라이언트에서는 프로세스가 끝나지 않기 때문에 발생한다.
이런 경우 간단하게 해결 방법은 okhttp request 객체에
addHeader("Connection","close")
만 추가해주면 됐다.
Request request = new Request.Builder()
.url(requestUrl)
.addHeader("Connection", "close")
.get()
.build();
나의 경우 서버에서 데이터를 받아와서 처리하는데 많은 로직이 있어 처리시간이 짧지 않았고, 프로세스를 처리 하는 도중 요청받는 서버의 keep_alive timeout 시간이 지나 다음 오류를 뱉었다.
데이터를 받아 온 후라 다음 오류가 나도 상관없었지만, 오류를 모니터링 할때 보기 안좋기 때문에 해결해 주었다.
예를 들어 keep_alive timeout 이 긴 서버의 경우는 해당 오류가 나지 않을 것이다.
참고문헌
github.com/square/okhttp/issues/2738
반응형
'Java > Java Library' 카테고리의 다른 글
[Gson] gson deserialize 파싱사용 이유 및 방법 (0) | 2021.02.01 |
---|---|
[Java Library] gson casting 오류 com.google.gson.internal.LinkedTreeMap cannot be cast to my class - jsonlist 를 List 객체로 만들기 (0) | 2021.01.28 |
sftp java 접속 라이브러리 jsch (0) | 2021.01.27 |
[JAVA] Date 및 LocalDateTime 을 Json String으로 변환시 주의(Gson 및 Jackson) (0) | 2020.10.25 |
Gson Desrializer Serializer - json 파싱 및 json string 만들기(커스텀) (0) | 2020.10.21 |