powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring and HttpClient: The target server failed to respond
6 сообщений из 6, страница 1 из 1
Spring and HttpClient: The target server failed to respond
    #39249044
slippery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. У меня есть проблема с http client от apache. И так у меня есть 2 сервера которые взаимодействует между собой по REST. Назовем тот, что принимает запросы(имеет АПИ) - Сервер, а тот, что посылает - Клиент. Сервер крутится на 8 томкате и АПИ реализован как @Controller от spring версии 4.2.5. Клиент же крутится в jboss(4.2.3.GA) и основан тоже на spring 3.2.12. Клиент использует RestTemplate для вызова АПИ на Сервере. Некоторые методы АПИ на сервере выполняются довольно таки долго, 15-25 секунд. И иногда при выполнении таких методов я получаю следующую ошибку:

Код: java
1.
2.
3.
org.apache.http.NoHttpResponseException: The target server failed to respond
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:95)
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:62)


при этом не смотря на исключение, запрос от Клиента доходит до Сервера выполняется там секунд 15-20 и затем вылетает это исключение. С запросами которые выполняются 1-2 секунды таких ошибок не наблюдалось. ReadTimeout не происходит, все же время выполнения таких методов меньше.

Можете ли вы объяснить почему возникает ошибка и как я могу это исправить?

На всякий случай приведу код Клиента:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
@Bean
public RestTemplate restTemplate() {
  RestTemplate restTemplate = new RestTemplate();
  restTemplate.setMessageConverters(ImmutableList.of(messageConverter));
  restTemplate.setErrorHandler(errorHandler);

  HttpHost host = URIUtils.extractHost(new URI("http://127.0.0.1:8080"));
  HttpComponentsDigestRequestFactory requestFactory = new HttpComponentsDigestRequestFactory(host,new AuthProperties("user", "password", "realm"))
  requestFactory.setConnectTimeout(5000);
  requestFactory.setReadTimeout(30000);
  restTemplate.setRequestFactory(requestFactory);
}

class HttpComponentsDigestRequestFactory  extends HttpComponentsClientHttpRequestFactory {    

 public HttpComponentsDigestRequestFactory(@NotNull HttpHost host, @NotNull AuthProperties auth) {
   DefaultHttpClient httpClient = (DefaultHttpClient) getHttpClient();
   httpClient.getCredentialsProvider().setCredentials(new AuthScope(host, auth.getRealm(), "DIGEST"),
        new UsernamePasswordCredentials(auth.getUsername(), auth.getPassword()));
  }

@Override
protected HttpContext createHttpContext(HttpMethod httpMethod, URI uri) {
  AuthCache authCache = new BasicAuthCache();
  DigestScheme digestScheme = new DigestScheme();
  digestScheme.overrideParamter("realm", realm);
  authCache.put(host, digestScheme);
  BasicHttpContext context = new BasicHttpContext();
  context.setAttribute(ClientContext.AUTH_CACHE, authCache);
  return context;
  }

public void post(@NotNull String relativeUrl, @NotNull Object body,     @NotNull Map<String, ?> uriVariables) {
  String url = gateway + relativeUrl;
  restTemplate.postForEntity(url, body, MyError.class, uriVariables);
}

private String json(Object body) {
 return gson.toJson(body);
}
...
Рейтинг: 0 / 0
Spring and HttpClient: The target server failed to respond
    #39249051
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А есть уверенность что это в клиента таймаут произошел? Возможно, сервер дропнул соединение.
...
Рейтинг: 0 / 0
Spring and HttpClient: The target server failed to respond
    #39249204
slippery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
возможно и так, но ошибку я вижу в логе клиента. кстати его версия HttClient 4.2.1 вдруг поможет. А в логе сервера ничего нет.

как я могу проверить, не дропнул ли сервер соединение и почему он может это делать с учетом того, что запрос выполняется.
ReadTimeout не вышел еще. Я проверял специально делаю эмуляцию долгого выполнения через Thread.sleep. если таймаут заканчивается я получаю: timed out; nested exception is java.net.SocketTimeoutException: Read timed out. Но это не этот случай
...
Рейтинг: 0 / 0
Spring and HttpClient: The target server failed to respond
    #39249208
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slippery,

Попробуйте включить подробное логирование. Если сервер дропнул соединение должно быть другое исключение.
...
Рейтинг: 0 / 0
Spring and HttpClient: The target server failed to respond
    #39249209
slippery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я имел в вижду, что ReadTimeout не происходит на клиенте, так как он стоит у меня больше чем выполняются даже самые долгие запросы и если бы происходил, то я бы получал совсем дуругю ошибку.
...
Рейтинг: 0 / 0
Spring and HttpClient: The target server failed to respond
    #39249212
slippery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowiczslippery,

Попробуйте включить подробное логирование. Если сервер дропнул соединение должно быть другое исключение.

А вы не подскажите как это сделать для систмных классов, <root level="DEBUG"> в logback.xml будет достаточно?

И какое сообщение я примерно могу увидеть на стороне сервера?
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring and HttpClient: The target server failed to respond
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]