Dubbo关于timeout等相关配置的优先级

关于配置中timeout,有的服务有时是provider的身份,有时是consumer的身份,配置的timeout属性到底哪个生效,哪个优先,折腾了我一阵子,于是自己测试了半天,总结一下

原则:

1.精度优先(方法级优先,接口级次之,全局配置再次之)

2.消费者设置优先(如果级别一样)

下面简单demo记录下:

用户模块xml配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://code.alibabatech.com/schema/dubbo
    http://code.alibabatech.com/schema/dubbo/dubbo.xsd">


    <dubbo:provider timeout="2000"/>
    <dubbo:consumer timeout="3000"/>
    
    <!--loadbalance:负载均衡的一种轮询算法-->
    <bean id="userService" class="com.study.impl.UserServiceImpl"></bean>
    <dubbo:service interface="com.study.service.UserService" ref="userService" loadbalance="roundrobin"/>
    <bean id="authrizationService" class="com.study.impl.AuthrizationServiceImpl"></bean>
    <dubbo:service interface="com.study.service.AuthrizationService" ref="authrizationService" loadbalance="roundrobin"/>


    <!--retries:找不到依赖服务时,不重试-->
    <!--check:启动时不检查依赖服务是否存在-->
    <dubbo:reference id="productService" interface="com.study.service.ProductService" retries="0" check="false"/>
    <dubbo:reference id="saleService" interface="com.study.service.OrderService" retries="0" check="false"/>

</beans>

<dubbo:provider > 这里的配置表示:UserService,AuthrizationService这两个服务在作为服务提供者的时候,超时时间是2s

<dubbo:consumer 这里的配置表示:ProductService,SaleService这两个服务在作为服务消费者的时候,被调用时的超时时间是3s

 

商品模块xml配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://code.alibabatech.com/schema/dubbo
    http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <dubbo:application name="dubbo_provider"/>
     
    <dubbo:provider timeout="4000"/>
    <dubbo:consumer timeout="5000"/>

    <bean id="productService" class="com.study.impl.ProductServiceImpl"></bean>
    <dubbo:service interface="com.study.service.ProductService" ref="productService" loadbalance="roundrobin"/>

    <dubbo:reference id="userService" interface="com.study.service.UserService" retries="0" check="false"/>

</beans>

<dubbo:provider > 这里的配置表示:ProductService这个服务在作为服务提供者的时候,超时时间是4s

<dubbo:consumer 这里的配置表示:UserService这个服务在作为服务消费者的时候,被调用时的超时时间是5s

  业务场景1:用户模块UserService调用商品模块ProductService时,整个过程的超时时间又是怎么样的呢?

public class UserServiceImpl
{
       private ProductService productService;  
   
       public void getUser()
       {
          this.userMapper.getOne();
          ...
          this.productService.getProductByUser(); 

       }   
}

1.用户模块的UserService是作为provider的身份执行的,UserService本身的超时时间是2s;

2.远程调用的商品模块的ProductService的超时时间是2s还是4s还是5s呢?答案是2s,同一级别下调用,consumer的配置优先

思考:如果这里用户模块的<dubbo:consumer不设置超时时间,那么远程调用的商品模块的ProductService是多少呢?答案是4s,如果远程调用的商品模块不设置<dubbo:provider,这里超时时间就会缺省,就是找不到配置的,就会以默认超时时间1s为准。

 

业务场景2:商品模块ProductService调用用户模块UserService时,整个过程的超时时间又是怎么样的呢?

public class ProductServiceImpl
{
       private UserService userService;
   
       public void getProduct()
       {
          this.productMapper.getOne();
          ...
          this.userService.getUserByProduct();
       }   
}

1.商品模块的ProductService是作为provider的身份执行的,ProductService本身的超时时间是4s;

2.远程调用的用户模块的UserService的超时时间是2s还是4s还是5s呢?答案是5s,同一级别下调用,consumer的配置优先

思考:如果这里商品模块的<dubbo:consumer不设置超时时间,那么远程调用的用户模块的UserService是多少呢?答案是2s,如果远程调用的用户模块不设置<dubbo:provider,这里超时时间就会缺省,就是找不到配置的,就会以默认超时时间1s为准。

最后说一句:除了timeout属性是这样的优先级规则,retries等其他配置也是这样

 

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值