我在生产中看到很多连接重置,可能有多种原因,但我想确保代码中没有连接泄漏。我在代码中使用Jersey客户端
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
可能是由许多可能的原因引起的。一种可能的情况是服务器在处理请求时超时,这就是为什么客户端收到连接重置的原因。在这里,已回答问题的注释部分详细讨论了连接重置的可能原因。我可以想到的一种可能的解决方案是配置HttpClient
为在失败的情况下重试请求。您可以设置HttpMethodRetryHandler
如下所示的代码(参考)。您可能需要根据收到的异常来修改代码。
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);
我正在尝试创建RESTful web服务,但无法使删除生效,我不确定问题在哪里。我认为问题在客户端项目中,但也可能在服务器项目的资源类中。 我有一个使用这种方法的学生道课,我不认为这是一个问题,因为它适用于其他项目。 我有一个StudentResource类,它是我从包含这段代码的模式中创建的RESTful资源 然后,我创建了一个java项目,并使用此方法创建了名为OneStudent的RESTf
我读了很多文章来寻找java应用程序的最佳Rest客户机,最后我发现将Jersey与ApacheHTTP客户机4.5结合使用非常好,但在很多文章中,我发现现在改型是最好的(我没有提到Volley,因为在我的例子中,我不需要API支持缓存)。 对于java客户机应用程序,改型是否更好。还是对Android来说更好?为什么我以前没有找到这个比较。。它们无法比较? 我可以比较一下它们的性能、连接池、它们
我必须向只通过表单数据(Mediatype.application_form_urlencoded)接受参数的服务器发布pojo。我知道jersey client可以将对象转换为xml、json和其他类型,但试图转换为APPLICATION_FORM_URLENCODED会出现异常,显示指定类型的body writer不可用。 是否有方法将对象序列化为application_form_urlenc
DropWizard在REST的引擎盖下使用泽西。我正在尝试弄清楚如何为我的DropWizard应用程序将公开的RESTfulendpoint编写客户端。 为了这个例子,让我们假设我的DropWizard应用程序有一个< code>CarResource,它为CRUDding cars公开了几个简单的RESTfulendpoint: 因此,我认为结构化的API客户端将类似于: 但是我能找到的关于D
我收到连接重置错误,代码如下。到底是什么原因导致了连接重置?这是因为我试图忽略SSL证书验证的方式吗? 堆栈跟踪 java.net.SocketExcema:连接重置java.net.SocketInputStream.read(SocketInputStream.java:179)com.ibm.jsse2. a. a(a.java:148)com.ibm.jsse2. a. a(a.java:
问题内容: 如何使用Jersey客户端API将GET请求发送到运行HTTPS协议的服务器。我可以使用任何示例代码吗? 问题答案: 这样构建您的客户 从此博客文章中窃取了更多详细信息:http : //blogs.oracle.com/enterprisetechtips/entry/consumption_restful_web_services_with 有关设置证书的信息,请参见以下已很好回答