1 Dubbo超时机制概述
在Dubbo中可以设置服务的超时时间,这个超时时间指服务消费方调用Dubbo接口的超时时间。
当调用Dubbo接口的耗时小于等于超时时间,则调用正常执行完成;当调用Dubbo接口的耗时大于
超时时间,则抛出接口超时异常。
注意:这个超时时间对服务提供方接口的执行无任何影响。服务提供方接口执行耗时即使超过了这
个超时时间,接口依旧正常执行。
2 设置超时时间的目的
设置Dubbo接口调用的超时时间的主要目的是确保服务消费方系统的稳定性和可用性。
如果没有设置超时时间,那么服务消费方发起远程调用后可能会一直等待,直到服务提供方返回结
果,这可能导致调用线程阻塞,进而影响整个系统的性能和稳定性。
通过设置超时时间,可以在服务调用超过预定时间后自动中断调用,释放被阻塞的线程资源,避免
系统因为长时间的等待而陷入僵局。同时,这也可以让调用方有机会进行错误处理,比如重试调
用、记录日志、触发报警等,以应对服务调用失败的情况。
3 设置超时时间和配置的优先级
3.1 设置超时时间
使用 timeout 参数进行设置,默认的超时时间为 1000ms。可以在服务消费方设置,也可以在服务提供方设置。设置方式主要有以下几种。
(1)全局超时设置
设置全局的超时时间。这通常是在dubbo.properties文件中完成的。举例如下。
# 服务提供端(ms)
dubbo.provider.timeout=1000
或
# 服务消费端(ms)
dubbo.consumer.timeout=1000
(2)局部超时设置
针对具体的服务或方法进行超时设置。举例如下。
<dubbo:service interface="com.example.DemoService" ref="demoService" timeout="10000"/>
或
<dubbo:reference id="demoService" interface="com.example.DemoService" timeout="10000"/>
(3)注解方式设置
@DubboService(timeout = 10000)
public class TestServiceImpl implements TestService {
// ...
}
或
@DubboReference(timeout = 10000)
Tes