当前位置: 代码迷 >> 综合 >> dubbo异常信息:com.alibaba.dubbo.remoting.TimeoutException
  详细解决方案

dubbo异常信息:com.alibaba.dubbo.remoting.TimeoutException

热度:3   发布时间:2023-12-13 07:09:30.0

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

 

  相关解决方案