Dubbo学习---记坑

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/libra_ts/article/details/80815899


1.因为没有配置dubbo请求连接超时时间,导致出现以下场景

因为没有配置dubbo请求连接超时时间,消费者请求到生产者之后,调用了查询语句,但是消费者端报错了。说连接超时异常,当再请求一次,发现又可以了。

com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method getUserList in the service com.tscyq.shop.central.api.service.UserRemoteOpenService. Tried 1 times of the providers [172.16.50.109:20880] (1/1) from the registry 47.93.13.108:2181 on the consumer 172.16.50.109 using the dubbo version 2.5.3. Last error is: Invoke remote method timeout. method: getUserList, provider: dubbo://172.16.50.109:20880/com.tscyq.shop.central.api.service.UserRemoteOpenService?accesslog=true&anyhost=true&application=consumer-shop-admin&check=false&dubbo=2.5.3&interface=com.tscyq.shop.central.api.service.UserRemoteOpenService&methods=getUserList&pid=18980&retries=0&side=consumer&timestamp=1529996384883, cause: Waiting server-side response timeout. start time: 2018-06-26 15:03:06.647, end time: 2018-06-26 15:03:07.649, client elapsed: 1 ms, server elapsed: 1001 ms, timeout: 1000 ms, request: Request [id=3, version=2.0.0, twoway=true, event=false, broken=false, data=RpcInvocation [methodName=getUserList, parameterTypes=[], arguments=[], attachments={path=com.tscyq.shop.central.api.service.UserRemoteOpenService, interface=com.tscyq.shop.central.api.service.UserRemoteOpenService, version=0.0.0}]], channel: /172.16.50.109:56368 -> /172.16.50.109:20880

问题分析:由于查询耗时,导致请求超时,dubbo在没有配置请求超时时间的前提下,请求默认超时时间是1s,如果生产者和消费者都配置了超时时间,那么系统会以消费者的超时时间为准。第二次又可以了原因是因为mysql默认查询是有缓存的,第二次请求默认读取mysql缓存,没有超过1s就返回了,所以成功。

解决方案:
在对应的接口节点上配置timeout属性即可

<dubbo:reference id="userRemoteOpenService" interface="com.tscyq.shop.central.api.service.UserRemoteOpenService" retries="0" timeout="${dubbo-timeout}"/>

猜你喜欢

转载自blog.csdn.net/libra_ts/article/details/80815899