2016-03-06 3 views
1

У меня возникла проблема с методом обмена шаблонами отдыха. Я использую его для отправки запросов на сервер GCM Google. Каждый раз по одному и тому же запросу, только получатель отличается (поле в JSON). Когда я отправляю более 200 запросов одновременно, на 207-м я получаю ответ 400 Bad Request, после этого я могу подождать некоторое время, но все равно получаю тот же ответ для каждого исходящего запроса с моего сервера. Похоже, мой код блокирует доступ к сетевым ресурсам. Когда я перезапускаю сервер, ресурсы снова доступны. Конфигурация RestTemplate:RestTemplate Bad Запросить несколько запросов

<bean id="restTemplate"     class="org.springframework.web.client.RestTemplate"> 
    <constructor-arg ref="httpRequestFactory"> </constructor-arg> 
</bean> 

<bean id="httpRequestFactory"   class="org.springframework.http.client.HttpComponentsClientHttpRequestFactory"> 
    <constructor-arg ref="httpClient"> </constructor-arg> 
    <property name="connectTimeout" value="1000" /> 
</bean> 


<bean id="httpConnectionManager"  class="org.apache.http.impl.conn.PoolingClientConnectionManager"> 
    <property name="defaultMaxPerRoute" value="50" /> 
     <property name="maxTotal" value="100" /> 
</bean> 


<bean id="httpClient" class="org.apache.http.impl.client.DefaultHttpClient" > 
    <constructor-arg ref="httpConnectionManager" /> 
</bean> 

запрос:

ResponseEntity<String> response = restTemplate.exchange(
      "myaddress", 
      HttpMethod.POST, request, String.class); 

журналы: ОТЛАДКА (gcmjmsContainer-1) Создан запрос POST [org.springframework.web.client.RestTemplate] для "https://gcm-http.googleapis.com/gcm/send"

DEBUG [org.springframework.web.client.RestTemplate] (gcmjmsContainer-1) Setting request Accept header to [text/plain, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, application/*+json, */*] 

DEBUG [org.springframework.web.client.RestTemplate] (gcmjmsContainer-1) Writing [{ 
    "to" : "1", 
    "notification" : { 
    "text" : "mytext", 
    "click_action" : "SHOW" 
    }, 
    "data" : { 
    "orderid" : 1, 
    "status" : "paid" 
    } 
}] as "application/json" using [org.springfr[email protected]1d92cbc8] 

DEBUG [org.apache.http.impl.conn.PoolingClientConnectionManager] (gcmjmsContainer-1) Connection request: [route: {s}->https://gcm-http.googleapis.com:443][total kept alive: 2; route allocated: 1 of 50; total allocated: 2 of 100] 

DEBUG [org.apache.http.impl.conn.PoolingClientConnectionManager] (gcmjmsContainer-1) Connection leased: [id: 1][route: {s}->https://gcm-http.googleapis.com:443][total kept alive: 1; route allocated: 1 of 50; total allocated: 2 of 100] 

DEBUG [org.apache.http.impl.client.DefaultHttpClient] (gcmjmsContainer-1) Stale connection check 

DEBUG [org.apache.http.impl.client.DefaultHttpClient] (gcmjmsContainer-1) Attempt 1 to execute request 

DEBUG [org.apache.http.impl.conn.DefaultClientConnection] (gcmjmsContainer-1) Sending request: POST /gcm/send HTTP/1.1 

DEBUG [org.apache.http.impl.conn.DefaultClientConnection] (gcmjmsContainer-1) Receiving response: HTTP/1.1 400 Bad Request 

DEBUG [org.apache.http.impl.client.DefaultHttpClient] (gcmjmsContainer-1) Connection can be kept alive indefinitely 

WARN [org.springframework.web.client.RestTemplate] (gcmjmsContainer-1) POST request for "https://gcm-http.googleapis.com/gcm/send" resulted in 400 (Bad Request); invoking error handlerng error handler 

ответ

1

На самом деле я нашел решение, на котором я отправил свой вопрос. Мне пришло в голову, что в заголовке Accept есть много записей «application/json». Моя ошибка в коде была: restTemplate.getMessageConverters(). Add ( new MappingJackson2HttpMessageConverter());

Выполнение каждого раза, когда я отправлял запрос, используя одноэлемент restTemplate.

Смежные вопросы