春季远程处理的SimpleHttpInvokerRequestExecutor在不应该重试请求时

时间:2019-08-29 14:30:49

标签: java spring http spring-remoting

我正在调查一个非常奇怪的问题。我正在研究的项目使用Spring远程处理通过http调用方法。根据我到目前为止的收集,发生了以下情况:

  1. 我的客户代码执行对服务器的请求
  2. 服务器开始处理请求,但速度很慢
  3. 25-30秒后,服务器收到新请求
  4. 第二个请求完成,客户端继续进行处理
  5. 过了一会儿,第一个请求完成了,但是客户不再关心

由于我的客户端代码仅对Spring远程处理客户端执行一个请求,并且该客户端在收到第二次调用后继续运行,因此我只能得出结论,这发生在Spring远程处理客户端中。

客户端使用AbstractHttpInvokerRequestExecutor进行实际的http调用,而客户端又使用SimpleHttpInvokerRequestExecutor进行请求。但是,据我所知,它没有重试请求的机制。所以现在我很困。

谁能想到可能导致这种行为的原因? (我试图保持问题的整洁,但如有需要,我会提供更多详细信息。)

1 个答案:

答案 0 :(得分:0)

只是给您一些指导的想法,不一定是解决方案。使用第三方Http客户端(不是Spring的一个)来查看它是否改变了行为。这可能有助于您查看是否是SimpleHttpInvokerRequestExecutor重犯“罪名”或其他原因。这是一个非常简单的3d派对HttpClient:在MgntUtils中提供开源库(由我编写)。使用非常简单。看一下Javadoc。库本身以Maven artifactsGit的形式提供(包括源代码和Javadoc)。总的来说,您的代码可能看起来像这样:

private static void testHttpClient() {
    HttpClient client = new HttpClient();
    client.setContentType("application/json");
    String content = null;
    try {
        content = client.sendHttpRequest("http://www.google.com/", HttpMethod.GET);
        //content holds the response. Do your logic here
    } catch (IOException e) {
        //Error Handling is here
        content = TextUtils.getStacktrace(e, false);
    }
}