博客摘录「 dubbo默认超时设置容易引发的问题(默认1秒)」2023年9月23日

超时是针对消费端还是服务端?超时在哪设置?超时设置的优先级是什么?超时的实现原理是什么?超时解决的是什么问题 ?

回答:

1.超时是针对消费端的,消费端会抛出TimeoutException 而服务器端仅仅是一个 warn日志

2.超时在消费端、服务器端设置,dubbo会合并这两个设置

3.consumer方法级别 > provider 方法级别 > consumer 接口级别 > provider 接口级别 > consumer 全局级别 > provider简单说就是 消费端> 服务端 且配置粒度越低效果越强

4.全局级别。如果都没配置,那么就是dubbo默认的1秒

5.详细请参考文章分析剪短的说:有一个专门的超时线程去判断返回是否超时,超时就恢复该调工作线程并抛出异常

6.最主要是宝贵的线程,客户端的用户线程不能因为服务端超时而一直类似wait, 导致无法正常响应其他业务。这里应该怎样配置自己的超时机制和重试机制呢?

DUBBO消费端设置额超时时间需要根据业务实际情况来设定,如果设置的时间太短,导致复杂业务本来就需要很长时间完成,导致在设定的超时时间内无法完成正常的业务处理。如果消费端达到超时时间,那么dubbo会进行重试机制(如果配置了dubbo.reference.retries>1),这种情况其实给服务提供端带来莫名的压力,而压力是正常值*dubbo.reference.retries,最终dubbo的消费端会出现RpcException提示retry了多少次还是失败。这种情况就是没有合理设置接口超时时间带来的问题。

说完超时时间,再说说重试机制。重试机制是在等待超时时间到了之后或者服务提供端出现异常进行再次重试的机制。这个并不代表服务提供端完全执行失败了。所以不是所有接口都适合重试,如果一个服务是不等幂,那么不适合重试的机制,因为会存在重复提交的问题,否则是可以进行重试的。比如提交一个订单的接口是不能进行重试的,而查询类型的接口是可以重试的

你可能感兴趣的:(笔记)