2014-07-11 2 views
2

클라이언트 측에서 org.springframework.web.client.RestTemplate을 사용하여 CentOS 호스트에서 실행되는 안정된 웹 서비스를 대상으로하는 나머지 호출을 실행합니다.왜 내 HTTP GET 요청이 시간 초과됩니까?

을 :

나는 이러한 일련의 호출 내가

"시간이 초과하여 연결로 java.net.SocketTimeoutException"라는 연결 시간 초과 오류가 만들어진 이상한 행동을보고 있어요 여기서 주목할 점은 적어도 하나의 asynch http 호출이 이루어진 후에 http 호출이 항상 실패한다는 것입니다. 실패시 HTTP 호출은 5 초의 대기 시간으로 여러 번 시도됩니다.

아래는 HTTP 호출에 전달받을 헤더입니다 -

[Accept: application/json 
, Content-Type: application/json;charset=UTF-8 
, Accept-Language: en_US 
, API-Version: 100 
, X-Request-ID: a99ccd66-5172-4056-a319-4e2e2614aff6 
, X-User-Waiting: false 
, Connection: Close 
, Content-Length: 2015 
] 

는 HTTP 호출이 서버를 타격도로 보이지 않는다. 내가 여기서 무엇을 놓치고 있니? 다르게 설정해야하는 헤더가 있습니까?

답변

1

한 가지 가능한 설명은 서버가 일정 기간 내에 IP 주소에서 허용 할 연결 수를 제한하여 API 트래픽의 속도를 제한한다는 것입니다. 첫 번째 n 요청은 n + 1 요청이 신기하게 실패하기 전에 성공할 것이라고 단서가 있습니다.

이 속도 제한이 방화벽 수준에서 수행되는 경우 웹 서버에 도달하기 전에 HTTP 요청이 삭제되어 로그에 표시되지 않습니다.

서버를 제어 할 수있는 것 같습니다. 당신이 할 경우, (루트로) 실행 해보십시오 :

iptables -vL INPUT

당신이

tcp dpt:http state NEW limit: avg 10/min burst 5 

또는

같은 항목의 쌍과 같이 보입니다 "대상"열에서 항목을 참조하는 경우
tcp dpt:http state NEW recent: UPDATE seconds: 60 hit_count: 10 name: DEFAULT side: source 
tcp dpt:http state NEW recent: SET name: DEFAULT side: source 

이 상황이 발생할 가능성이 큽니다.이 제한을 수락하거나 서버의 방화벽 규칙을 수정해야합니다.

이 서버를 제어하지 않으면 사용중인 API 문서에서 클라이언트의 속도 제한이 적용되는지 확인하십시오. 서버가 응답에 헤더()를 반환하여 고객이 한도에 도달 할시기를 예측할 수 있습니다.

관련 문제