1. 程式人生 > >dubbo異常資訊:com.alibaba.dubbo.remoting.TimeoutException

dubbo異常資訊:com.alibaba.dubbo.remoting.TimeoutException

dubbo異常資訊:

Could not complete request

com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method getUserByPrimaryKey in the service com.dubbo.common.service.UserService. Tried 3 times of the providers [192.168.4.118:20880] (1/1) from the registry 127.0.0.1:2181 on the consumer 192.168.4.118 using the dubbo version 2.5.3. Last error is: Invoke remote method timeout. method: getUserByPrimaryKey, provider: dubbo://192.168.4.118:20880/com.dubbo.common.service.UserService?anyhost=true&application=dubboWeb&check=false&dubbo=2.5.3&interface=com.dubbo.common.service.UserService&methods=update,getUserByPrimaryKey,getUser,delete,getById,findPage,add,getUsers&pid=1156&revision=0.0.1-SNAPSHOT&side=consumer&timestamp=1492760542657, cause: Waiting server-side response timeout. start time: 2017-04-21 15:48:37.322, end time: 2017-04-21 15:48:38.325, client elapsed: 1 ms, server elapsed: 1001 ms, timeout: 1000 ms, 

網上說了很多關於此異常的處理辦法,比如

1 實現序列化

==》dubbo是遠端呼叫實現,在傳輸物件過程中,被傳輸的物件必須實現序列化

例子: public class User implements Serializable {}。

2 dubbo連線時間調整 

==》採用dubbo實現,在debug測試過程中每次呼叫dubbo服務時就會產生異常,呼叫後臺執行了三 次,也就是服務調了三次,看後臺總是看到一個tried 3 times……這也正是產生三次的原因,後來仔細看了後臺異常說的是……timeout……,那麼自然想到是服務超時,個人覺得是在呼叫一次服務時,後臺需要執行的時間太長,超出了服務的響應超時時間(response timeout),所以它會再次嘗試呼叫服務,可能是dubbo服務的設定,最多嘗試三次,所以就會產生呼叫三次服務,修改dubbo服務的超時時間timeout,網上找設定dubbo timeout的方法,http://wenku.baidu.com/view/5c6854287375a417866f8f61,這裡邊仔細介紹了設定超時時間的方法,還進行了詳細分析,開始設定的timeout=10000,少量的可以正常完成,可是數大點就不行了,後來有同事說可以設定timeout=0就沒有超時時間,但是測試過,不可以,因為預設的是500,你設定了0,就是不管怎樣都是超時了,這個和其他框架的配置不太一樣,後來在服務提供端設定timeout=1200000,一般情況設定為3000毫秒。

例子:

<dubbo:service interface="com.XXXX.XXXXX.CardService" ref="cardService" timeout="1200000"/>

3 資料庫服務沒開

4 redis服務沒開

ps:如果專案中操作到了資料庫和redis,如果服務沒啟動的話。也是會出現這樣的錯誤:com.alibaba.dubbo.remoting.TimeoutException