1. dubbo远程调用超时

一、dubbo配置之间的关系:

       左边是服务提供方的相关配置,右边是服务消费方的相关配置。中间是两方的共享配置。下边是方法和方法参数的相关配置。

       ReferenceConfig继承ConsumerConfig,ServiceConfig继承ProviderConfig。如果没有进行Reference和Service的配置,默认是Consumer和Provider的配置。

二、配置覆盖关系:

       1、方法级优先,接口级次之,全局配置再次之。(级别小的优先)

       2、如果级别一样,则消费方优先,提供方次之。

       其中,服务提供方配置,通过URL经由注册中心传递给消费方。

       (配置的查找顺序,其他retries,loadbalance,actives等类似)

三、标签:

四、举例

1、项目中的配置

dubbo.xml的配置如下:

<!-- 应用信息,用于计算依赖关系 -->

<dubbo:application name="basicInfoservice"/>

<!-- 使用zookeeper注册中心暴露服务地址 -->

<dubbo:registry protocol="zookeeper" address="${dubbo.registry.address}" register="${dubbo.registry.register}"/>

<!--使用dubbo协议,basicInfoservice应用的端口为20881-->

<dubbo:protocol name="dubbo" port="20881"/>

<!--提供方的超时时间为3s-->

<dubbo:provider timeout="3000"/>

<!--消费方的超时时间为3s-->

<dubbo:consumer check="false" timeout="3000"/>

<!--需要引用的服务-->

<dubbo:reference id="dictionaryFacade" interface="com.dmsdbj.itoo.singleTableMaintain.facade.DictionaryFacade" />

<!--需要暴露的服务-->

<dubbo:service id="studentFacade" interface="com.dmsdbj.itoo.basicInfo.facade.StudentFacade" />

<!--studentFacade服务的超时时间为30s,addStudent方法的超时时间为60s-->

<dubbo:service id="studentFacade" interface="com.dmsdbj.itoo.basicInfo.facade.StudentFacade" timeout="30000"

loadbalance="roundrobin" >

<dubbo:method name="addStudent" timeout="60000"/>

</dubbo:service>

dubbo-server.properties配置如下:

dubbo.registry.address=zookeeper://192.168.22.156:2181?backup=192.168.22.154:2181,192.168.22.156:2182

dubbo.basicInfo.group=basicInfo

dubbo.basicInfo.version=1.0.0

dubbo.registry.register=false

       上述实例,我们的全局的超时时间为3s,负载均衡策略为随机,student服务的超时时间为30s,负载均衡策略为轮询。addStudent的超时时间为60s。

2、

<dubbo:annotation package="com.dmsdbj.itoo.basicInfo.facade"/>

这段配置的作用是开启注解扫描。

开启注解之后,就可以使用@Reference和@Service来订阅服务或者暴露服务啦。需要注意的是@Service并不是Spring的注解,而是

dubbo的注解 import com.alibaba.dubbo.config.annotation.Service;

也可以说<dubbo:reference>标签+@Autowired等价于<dubbo:annotation package="">+@Reference。

2. dubbo连接超时

首先,事物内加上其他io访问,例如缓存,rpc,mq等等,是一个很差的实践,因为io堵住的话,事务也会卡住,导致获取到的锁一直不释放。需要在设计的时候,最好提取出来

第二,dubbo是否是同步调用呢,如果是,超时是有异常的,无论是建立tcp连接超时,还是读取响应超时,超时异常都是运行时异常,spring默认是运行时异常回滚的,你看看是否这个异常没被catch

第三,spring和mysql都可以配置事务超时时间,一般mysql上面设置innodb_lock_wait_timeout,只要事务获取了锁,锁超过这个时间(或者等待锁超过这个时间),就会有异常并回滚。

3. 调用dubbo接口设置超时时间

根据自己的业务了,dubbo接口说白了还是网络请求,如果不是耗时的请求,用默认的超时时间就可以了,我记得是1s吧

4. dubbo服务间调用耗时长

dubbo 性能高的。

Apache Dubbo (incubating) |ˈdʌbəʊ| 是一款高性能、轻量级的开源 Java RPC 框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案、服务治理方案。

5. dubbo远程调用过程

消费者,生产者,之间调用,一个声明接口,一个声明实现类