Skip to content

dubbo接口超时配置

最近在跟第三方公司对接商城的账单数据,按对账单维度直接推送所有订单和明细,在测试大批量数据时出现了接口超时情况。原因是provider和consumer的超时时间都设置的比较短,因此要把这个接口超时时间调整更大一些。

dubbo服务超时时间设置及优先级

dubbo的服务超时时间有三个范围,分别是接口方法、接口类、全局。优先级接口方法>接口类>全局。而consumer服务和provider服务又分别可以配置这些超时时间。优先级为consumer>provider。因此完整的dubbo服务超时配置优先级为消费方method >提供方method>消费方reference>提供方service>消费方全局配置provider>提供方全局配置consumer

使用注解配置

provider:

java
@Service(timeout=60000)//alibaba包中的service,包含了spring framework的@Service功能和暴露服务功能,timeout单位ms

cosumer:

java
@Reference(timeout=60000)//单位ms

使用xml配置

提供方

xml
<dubbo:provider timeout=“5000”/> 全局配置

<dubbo:service timeout=“4000” …/> 接口类配置

<dubbo:method timeout=“3000” …> 方法配置
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://dubbo.apache.org/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans-4.3.xsd        http://dubbo.apache.org/schema/dubbo        http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
 
    <!-- 提供方应用信息,用于计算依赖关系 -->
    <dubbo:application name="user-service-provider"  />
 
    <!-- 使用zookeeper广播注册中心暴露服务地址 -->
    <dubbo:registry address="zookeeper://192.168.0.126:2181" />
 
    <!-- 用dubbo协议在20880端口暴露服务 -->
    <dubbo:protocol name="dubbo" port="20880" />
 
    <!-- 和本地bean一样实现服务 -->
    <bean id="userService" class="com.storyxc.service.impl.UserServiceImpl" />
 
    <!-- 声明需要暴露的服务接口 timeout 接口类中全部方法超时配置 优先级2 -->
    <dubbo:service interface="com.storyxc.service.UserService" ref="userService" timeout="4000" >
        <!-- 单个方法超时配置优先级最高1 -->
        <dubbo:method name="queryAllUserAddress" timeout="3000"></dubbo:method>
    </dubbo:service>
 
    <!-- 服务提供者全局超时时间配置优先级最低 -->
    <dubbo:provider timeout="5000"></dubbo:provider>
 
</beans>

消费方

xml
<dubbo:consumer timeout=“4000” > 全局配置

<dubbo:reference timeout=“3000” …> 接口类配置

<dubbo:method timeout=“2000” …> 方法配置
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://dubbo.apache.org/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans-4.3.xsd        http://dubbo.apache.org/schema/dubbo        http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
 
    <!-- 提供方应用信息,用于计算依赖关系 -->
    <dubbo:application name="order-service-consumer"  />
 
    <!-- 使用zookeeper广播注册中心暴露服务地址 -->
    <dubbo:registry address="zookeeper://192.168.0.126:2181" />
 
    <!-- 引用配置: 创建一个远程服务代理,一个引用可以指向多个注册中心 -->
    <dubbo:reference id="userService" timeout="3000" interface="com.storyxc.service.UserService">
        <dubbo:method name="queryAllUserAddress" timeout="2000"></dubbo:method>
    </dubbo:reference>
 
    <!-- orderService -->
    <bean class="com.storyxc.service.impl.OrderServiceImpl">
        <property name="userService" ref="userService"></property>
    </bean>
 
    <!-- 超时全局配置 -->
    <dubbo:consumer timeout="4000"></dubbo:consumer>
</beans>