在我們的REST服務之一的一些負載測試中,我們開始看到這幾樣的日誌,用於Spring的REST模板當負載增加時:彈簧安置模板接受頭
下一個併發負載和3-4小時後, http請求的Accept報頭變得
DEBUG: org.springframework.web.client.RestTemplate - Setting request Accept header to [text/plain, application/json, application/*+json, text/plain, text/plain, text/plain, text/plain, text/plain, text/plain, text/plain, text/plain, text/plain, text/plain, text/plain, text/plain, text/plain, text/plain, text/plain, text/plain, text/plain, text/plain, text/plain, text/plain, text/plain, text/plain, text/plain, text/plain, text/plain, text/plain, text/plain,<and so on>, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, */*, <and so on>]
最終所有的呼叫,使用RestTemplate開始400錯誤(錯誤的請求)未
被調用時的REST服務接受字符串作爲輸入,並具有以下這種服務簽名
@RequestMapping(value = "/findRecordById", method = {RequestMethod.POST, RequestMethod.GET })
@ResponseBody
public String findRecordById(@RequestBody String id) {//method body}
我們發送POST類型的請求到這個服務,請求內容形式爲「someId」,例如, 「123」
在輕負載下,在調用服務時沒有問題。
最讓人費解的是text/plain,*/*,它們不斷被添加到REST模板的接受標頭列表中。爲什麼會發生?
其餘模板bean聲明是這樣的:
<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
<constructor-arg>
<bean class="org.springframework.http.client.HttpComponentsClientHttpRequestFactory">
<property name="readTimeout">
<value>90000</value>
</property>
<property name="httpClient" ref="restHttpClient" />
</bean>
</constructor-arg>
</bean>
<bean id="restHttpClient" class="org.apache.http.impl.client.DefaultHttpClient">
<constructor-arg>
<bean class="org.apache.http.impl.conn.PoolingClientConnectionManager">
<property name="defaultMaxPerRoute">
<value>100000</value>
</property>
<property name="maxTotal">
<value>100000</value>
</property>
</bean>
</constructor-arg>
</bean>
被如何創建請求:
String postParams = "\"" + id + "\"";
String postResp = restTemplate.postForObject("findRecordById",postParams, String.class);
請告訴我們您做用'RestTemplate'的請求的例子.. – 2014-11-05 02:16:03
編輯的問題來說明如何請求是 – 2014-11-05 03:04:04
所以你直接從'ApplicationContext'獲得'restTemplate'而沒有額外的修改?你發送像上面這麼多的請求嗎? – 2014-11-05 03:22:28