2013-03-01 1 views
0

Я использую Spring 3.1.0, com.springsource.com.caucho-3.2.1.jar и tomcat-6.0.33 с обеих сторон (клиент/сервер). Все удаленные служебные звонки работают нормально, без каких-либо проблем, за исключением длительных служб (более 9/10 минут).соединение с пружинным соединением пружины hessian

Я использую Spring-Security для защиты удаленных вызовов.

Я создал новый удаленный сервис, который занимает около 30 минут, чтобы дать ответ клиенту в реальном schenerio. Служба работает отлично, если время исполнения меньше 9.xx/10 минут, но после достижения 9.xx/10 минут я получаю . Сброс соединения на моем клиенте Hessian.

Конфигурация клиента

<bean id="someService" class="org.springframework.remoting.caucho.HessianProxyFactoryBean"> 
    <property name="serviceUrl" value="http://hostname:8080/remoting/someService"/> 
    <property name="serviceInterface" value="com.SomeService"/> 
    <property name="username" value="${service.username}"/> 
    <property name="password" value="${service.password}"/> 
</bean> 

Конфигурация сервера

<bean id="someService" class="com.SomeService" /> 

<bean name="/someService" class="org.springframework.remoting.caucho.HessianServiceExporter"> 
    <property name="service" ref="someService" /> 
    <property name="serviceInterface" value="com.SomeService" /> 
</bean> 

стороне клиента - Трассировка стека:

2013-Feb-28 17:48:19 DEBUG [http-8080-1] com.SomeService:85 - Calling Some Service 
2013-Feb-28 17:58:16 ERROR [http-8080-1] com.SomeService:113 - 
org.springframework.remoting.RemoteConnectFailureException: 
Cannot connect to Hessian remote service at [http://hostname:8080/remoting/someService]; 
nested exception is com.caucho.hessian.client.HessianConnectionException: 
500: java.net.SocketException: Connection reset 
at org.springframework.remoting.caucho.HessianClientInterceptor.convertHessianAccessException(HessianClientInterceptor.java:262) 

стороне сервера - Tomcat (localhost.log)

SEVERE: Servlet.service() for servlet [remoting] in context with path [/JTService] 
threw exception [Hessian skeleton invocation failed; nested exception is 
ClientAbortException: java.net.SocketException: Connection reset] with root cause 
java.net.SocketException: Connection reset 
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:96) 

Я попытался установить 30 минут значение ReadTimeout доступного под HessianProxyFactoryBean но получить такое же исключение после 9.xx/10 минут. Однако, когда я пробовал с readTimeout 2 минуты, я получаю . Прочитано через 2 минуты.

После установки ReadTimeOut 2 минут я получаю:

2013-Feb-28 17:44:10 ERROR [http-8080-1] com.SomeService:113 - org.springframework.remoting.RemoteConnectFailureException: 
Cannot connect to Hessian remote service at [http://hostname:8080/remoting/someService]; 
nested exception is com.caucho.hessian.client.HessianConnectionException: 500: java.net.SocketTimeoutException: Read timed out 
org.springframework.remoting.RemoteConnectFailureException: 
Cannot connect to Hessian remote service at [http://hostname:8080/remoting/someService]; 
nested exception is com.caucho.hessian.client.HessianConnectionException: 500: java.net.SocketTimeoutException: Read timed out 

Как Как ReadTimeOut я did'nt см и настройки, связанные с тайм-аут соединения под HessianProxyFactoryBean.

Пожалуйста, подскажите, что делать?

ответ

0

После некоторой отладки я обнаружил, что через несколько минут мой Linux/CentOS-сервер закрывал сетевое подключение. Ошибка таймаута соединения устранена после увеличения времени ожидания подключения в */proc/sys/net/ipv4/tcp_keepalive_time *.

Linux консольного вывод образец:

Показывает время проверки активности в секундах

[[email protected] ~]# cat /proc/sys/net/ipv4/tcp_keepalive_time 
7200 

Используй следующую команду, чтобы увеличить значение

[[email protected] ~]# echo "21600" > /proc/sys/net/ipv4/tcp_keepalive_time 

Надеется, что это помогает другим тоже