java如何添加修复以避免504网关超时错误
我对另一个服务的GET方法调用出现504网关超时错误。 最近,我通过增加超时时间添加了一个修复程序,但这没有帮助
这就是我尝试过的
public void getUserInformation(final Integer userId) {
HttpClient httpClient = getBasicAuthDefaultHttpClient();
HttpGet httpGet = new HttpGet("http://xxxx/users/"+userId);
httpGet.addHeader("userid", userid);
httpGet.addHeader("secret", secret);
try {
HttpResponse response = httpClient.execute(httpGet);
HttpEntity entity = response.getEntity();
if (entity != null && HttpStatus.OK.value() ==
response.getStatusLine().getStatusCode()) {
ObjectMapper objectMapper = new ObjectMapper();
userInfo = objectMapper.readValue(entity.getContent(),
UserInfo.class);
} else {
logger.error("Call to the service failed: response code:
{}", response.getStatusLine().getStatusCode());
}
} catch (Exception e) {
logger.error("Exception: "+ e);
}
}
public HttpClient getBasicAuthDefaultHttpClient() {
CredentialsProvider provider = new BasicCredentialsProvider();
UsernamePasswordCredentials creds = new
UsernamePasswordCredentials(user, password);
provider.setCredentials(AuthScope.ANY, creds);
//Fix to avoid HTTP 504 ERROR (GATEWAY TIME OUT ERROR) for ECM calls
RequestConfig.Builder requestBuilder = RequestConfig.custom();
requestBuilder.setConnectTimeout(30 * 1000);
requestBuilder.setConnectionRequestTimeout(30 * 1000);
HttpClientBuilder builder = HttpClientBuilder.create();
builder.setDefaultRequestConfig(requestBuilder.build());
builder.setDefaultCredentialsProvider(provider).build();
return builder.build();
}
我在一个循环中调用这个过程来处理记录,这对大多数记录有效,但对其中的几个用户ID无效。 但我注意到,当我只运行失败的记录时,一切都会正常工作,我不确定这是什么问题
我想在收到504时再次调用该方法,希望下次能收到200
不确定这是不是个好主意。如有任何建议,将不胜感激
# 1 楼答案
我以前也遇到过同样的问题,下面是我为解决这个问题所做的检查。我将为上述类比添加更多细节
客户检查:
“其他服务”检查: 如果设置了限制/速率限制以避免DOS攻击。然后你需要增加其他服务的超时时间。我在AWS上使用了tomcat服务器:更改了yaml文件中的空闲超时
还更改了tomcat上的连接器超时
瞧!这对我很管用