gpt4 book ai didi

java - 如何添加修复以避免 504 网关超时错误

转载 作者:行者123 更新时间:2023-12-02 09:22:15 25 4
gpt4 key购买 nike

我从对另一个服务的 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();
}

我在循环中调用此进程来处理记录,这适用于大多数记录,但对于其中的少数 userId 则失败。但我注意到,当我只运行失败的记录时,一切都会正常工作,不确定这种情况下的问题是什么。

我想在收到 504 时再次调用该方法,希望下次能收到 200。

不确定这是个好主意。任何建议将不胜感激。

最佳答案

根据504 Gateway Timeout的描述状态代码,当您有一系列服务器进行通信以处理请求并且其中一个节点(不是您正在调用的服务器,而是稍后的某个节点)无法及时处理请求时,会返回该状态代码。

我认为您所处的情况可以描述如下。

CLIENT -> USERS SERVICE -> SOME OTHER SERVICE

问题在于某些其他服务处理您的请求的时间过长。 USERS SERVICE 在某个时间点放弃并向您返回此特定状态代码以表明这一点。

据我所知,您几乎无法采取任何措施来缓解这个问题。您需要联系USERS SERVICE 的所有者并要求他们增加超时时间,或者联系SOME OTHER SERVICE 的所有者并要求他们提高性能。

至于为什么会时不时的出现这样的错误。您可能与其他客户端一起传递性地使SOME OTHER SERVICE重载,导致其处理请求的速度越来越慢。或者可能是某些其他服务启用了节流或速率限制来防止拒绝服务攻击。通过向 USERS SERVICE 发出过多请求,您可能会消耗其拥有的配额。

当然,这些都是猜测,不知道你的实际情况。

关于java - 如何添加修复以避免 504 网关超时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58615315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com