我正在调查一个非常奇怪的问题。我正在从事的项目使用 Spring-remoting 通过 http 调用方法。从我目前收集的情况来看,会发生以下情况:
- 我的客户端代码执行对服务器的请求
- 服务器开始处理请求,但速度很慢
- 25-30 秒后,一个新的请求进入服务器
- 第二个请求完成,客户端继续处理
- 过了一会儿,第一个请求完成了,但客户端不再关心
由于我的客户端代码只对 Spring 远程处理客户端执行一个请求,并且客户端在它收到的第二个调用完成后继续打开,我只能得出结论,这发生在 Spring 远程处理客户端的某个地方。
客户端使用AbstractHttpInvokerRequestExecutor
进行实际的 http 调用,而这反过来又使用SimpleHttpInvokerRequestExecutor
发出请求。但是,从我所读到的内容来看,这没有重试请求的机制。所以现在我很卡住。
谁能想到可能导致这种行为的原因?(我试图保持问题清晰,但如果需要,我会有更多细节。
只是一个给你一些方向的想法,不一定是一个解决方案。使用第三方 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);
}
}