使用Spring RestTemplate調用客戶端休息調用,是否可以抑制這些調用? 例如最多10個併發呼叫。調節RestTemplate調用
RestTemplate本身似乎沒有提供這個本身,所以我不知道選項是什麼。
最好有一個通用的解決方案,例如,還可以抑制SOAP調用。
使用Spring RestTemplate調用客戶端休息調用,是否可以抑制這些調用? 例如最多10個併發呼叫。調節RestTemplate調用
RestTemplate本身似乎沒有提供這個本身,所以我不知道選項是什麼。
最好有一個通用的解決方案,例如,還可以抑制SOAP調用。
要創建RestTemplate的實例,你可以簡單地調用默認 無參數的構造函數。這將使用來自java.net包的標準Java類作爲底層實現來創建HTTP 請求。這可以通過指定 ClientHttpRequestFactory的實現來覆蓋。 Spring提供了使用Apache HttpComponents HttpClient創建請求的實現 HttpComponentsClientHttpRequestFactory。 HttpComponentsClientHttpRequestFactory使用org.apache.http.client.HttpClient的實例 進行配置,該實例可以依次通過憑證信息或連接池功能配置爲 。
我想看看配置RestTemplate使用HTTP組件和setMaxPerRoute和setMaxTotal玩。如果您的SOAP客戶端also happens to be using HTTP Components有可能在兩者之間共享共享HTTP組件設置。
另一種選擇是推出自己的。您可以創建一個Proxy,使用Semaphore來阻止,直到其他請求完成。這些方針的東西(注意,此代碼是完全未經測試,只是溝通的你會如何實現這一總體思路):如果你想要去與這種類型的方法
public class GenericCounterProxy implements InvocationHandler
{
private final Object target;
private final int maxConcurrent;
private final Semaphore sem;
GenericCounterProxy(Object target, int maxConcurrent)
{
this.target = target;
this.maxConcurrent = maxConcurrent;
this.sem = new Semaphore(maxConcurrent, true);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
try
{
// block until acquire succeeds
sem.acquire()
method.invoke(target, args);
}
finally
{
// release the Semaphore no matter what.
sem.release();
}
}
public static <T> T proxy(T target, int maxConcurrent)
{
InvocationHandler handler = new GenericCounterProxy(target, maxConcurrent);
return (T) Proxy.newProxyInstance(
target.getClass().getClassLoader(),
target.getClass().getInterfaces(),
handler);
}
}
:
謝謝約翰。我接受這個答案,因爲它給了我足夠的思考,並找到最適合我的情況的解決方案。 – 2014-09-25 06:42:38