1. 程式人生 > >Hessian遠端呼叫介面設定時間過期問題

Hessian遠端呼叫介面設定時間過期問題

一、背景描述:在專案中,專案模組分客戶端,服務端兩部分。使用Hessian作為RPC呼叫介面技術。如果系統初始化過程中,Hessian介面提供方呼叫介面返回資料時間太長,或者直接服務沒啟動,將導致介面呼叫方無法正常啟動(等待時間過長)。而這部分的介面資料,我又是不太在意的內容。這時候,我就需要增加一個超時時間,在超時後,直接返回超時狀態,程式將正常啟動。二、系統相關jar版本:Hessian:<dependency><groupId>com.caucho</groupId><artifactId>hessian</artifactId><version>4.0.38</version></dependency>Spring:<spring.version>4.0.3.RELEASE</spring.version>三、解決方案:Spring配置檔案spring-hessian.xml,Hessian介面中,新增配置屬性:<bean id="hessianService" class="org.springframework.remoting.caucho.HessianProxyFactoryBean"><property name="serviceUrl" value=""/><property name="serviceInterface" value=""/><!-- 超時配置資訊:連結超時+資料回寫超時--><property name="connectTimeout" value="3000"/><property name="readTimeout" value="300000"/></bean>四、解決思路:Spring中,hessian介面呼叫工廠Bean配置的是org.springframework.remoting.caucho.HessianProxyFactoryBean。在其原始碼中可以看到

繼承自HessianClientInterceptor,而在HessianClientInterceptor中,可以找到對應的Timeout設定方法:
也就是說HessianClientInterceptor支援設定socket連結超時,以及介面資料回寫超時。根據Spring一貫的做法,有setter方法,就可以設定對應的屬性值。最終,在xml檔案中新增對應的timeout設定,解決問題。