RestTemplate kullanarak Spring boot Restapi'de eski bağlantıya ne sebep olabilir?
"Eski bağlantıların, sunucunun bağlantıyı kesmesinin bir sonucu olduğunu, ancak istemcinin bilmediğini" okudum. Ancak uygulamamı SpringBoot RestTemplate tabanlı (daha sonra Apache'den PoolConnectionManager kullanarak) ve uygulamamdan başka bir API çağırdığımda bunun nasıl mümkün olduğunu bulmaya çalışıyorum? Bu durumda, uygulamam bir istemci ve aradığım uygulama bir sunucu görevi görüyor. Bu uygulamaya tıklarsam ve aradığım API isteği alır ancak isteği tam olarak doldurmadan önce bir şekilde bozulur. Bu durumda, kesinlikle sonumda istisnayla karşılaşacağım. Ve PoolConnectionManager'ın bu bağlantıyı kapatması durumunda oldukça eminim. O zaman nasıl eski bir bağım olabilir?
Yanıtlar
Varsayılan olarak, PoolConnectionManager siz bunu yapacak şekilde yapılandırmadığınız sürece bayatlanmış bağlantıyı kapatmaz. Yöntem setValidateAfterInactivity()
, bu süreyi yapılandırmak için kullanılır.
PoolingHttpClientConnectionManager connManager
= new PoolingHttpClientConnectionManager();
connManager.setValidateAfterInactivity(20);
HttpClient httpClient = HttpClients.custom().setConnectionManager(connManager).build();
Burada StackOverflow'da benzer bir örnek bulabilirsiniz.
** Soruları takip ettikten sonra güncelleyin **
Belgeleme davranışına bağlı olarak sürüm 4.4'ten biraz değiştirilmiştir.
Eski bağlantıların işlenmesi 4.4 sürümünde değiştirildi. Önceden kod, yeniden kullanmadan önce her bağlantıyı varsayılan olarak kontrol ediyordu. Kod artık yalnızca bağlantının son kullanımından bu yana geçen süre ayarlanan zaman aşımını aşarsa bağlantıyı kontrol eder. Varsayılan zaman aşımı 2000 ms olarak ayarlanmıştır.
https://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/impl/conn/PoolingHttpClientConnectionManager.html#setValidateAfterInactivity(int)