gpt4 book ai didi

java - 与 Jersey 客户端的连接重置

转载 作者:可可西里 更新时间:2023-11-01 02:52:01 25 4
gpt4 key购买 nike

我在生产中看到很多连接重置。可能有多种原因,但我想确保代码中没有连接泄漏。我在代码中使用 Jersey Client

Client this.client = ApacheHttpClient.create();

client.resource("/stores/"+storeId).type(MediaType.APPLICATION_JSON_TYPE).put(ClientResponse.class,indexableStore);

最初我以以下方式实例化客户端Client this.client = Client.create() 我们改成了ApacheHttpClient.create()。我没有在响应上调用 close(),但我假设 ApacheHttpClient 会在内部执行此操作,因为调用 HttpClient executeMethod 会为我们处理所有样板文件。代码编写方式是否存在潜在的连接泄漏?

最佳答案

就像你说的Connection Reset 可能是由许多可能的原因引起的。一种可能性是服务器在处理请求时超时,这就是客户端收到连接重置的原因。已回答问题的评论部分here详细讨论了连接重置的可能原因。我能想到的一种可能的解决方案是配置 HttpClient 以在失败的情况下重试请求。您可以像下面那样设置 HttpMethodRetryHandler (Reference)。您可能需要根据收到的异常修改代码。

HttpMethodRetryHandler retryHandler = new HttpMethodRetryHandler()
{
public boolean retryMethod(
final HttpMethod method,
final IOException exception,
int executionCount)
{
if (executionCount >= 5)
{
// Do not retry if over max retry count
return false;
}
if (exception instanceof NoHttpResponseException)
{
// Retry if the server dropped connection on us
return true;
}
if (!method.isRequestSent())
{
// Retry if the request has not been sent fully or
// if it's OK to retry methods that have been sent
return true;
}
// otherwise do not retry
return false;
}
};

ApacheHttpClient client = ApacheHttpClient.create();
HttpClient hc = client.getClientHandler().getHttpClient();
hc.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, retryHandler);
client.resource("/stores/"+storeId).type(MediaType.APPLICATION_JSON_TYPE).put(ClientResponse.class,indexableStore);

关于java - 与 Jersey 客户端的连接重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23568641/

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