0

我正在调查一个非常奇怪的问题。我正在处理的项目使用 Spring-remoting 通过 http 调用方法。从我到目前为止收集的信息中,发生了以下情况:

  1. 我的客户端代码向服务器执行请求
  2. 服务器开始处理请求,但速度很慢
  3. 25-30 秒后,一个新的请求进入服务器
  4. 第二个请求完成,客户端继续处理
  5. 一段时间后,第一个请求完成,但客户端不再关心

由于我的客户端代码只对 Spring 远程客户端执行一个请求,并且客户端在它接收到的第二次调用完成后继续运行,因此我只能得出结论,这发生在 Spring 远程客户端的某个地方。

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

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

4

1 回答 1

0

只是给你一些方向的想法,不一定是解决方案。使用第三方 Http 客户端(不是来自 Spring 的客户端)来查看它是否会改变行为。这可能会帮助您了解SimpleHttpInvokerRequestExecutor重试是否“有罪”或其他原因。这是一个非常简单的 3d 方 HttpClient:在 MgntUtils 开源库中提供(由我编写)。使用非常简单。看看Javadoc。库本身作为Maven 工件Git(包括源代码和 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);
    }
}
于 2019-08-29T14:58:29.620 回答