dubbo服务的超时(timeout)和 重试机制(retires)

节点角色说明:
Provider: 暴露服务的服务提供方。
Consumer: 调用远程服务的服务消费方。
Registry: 服务注册与发现的注册中心。
Monitor: 统计服务的调用次调和调用时间的监控中心。
Container: 服务运行容器。
调用关系说明:
0. 服务容器负责启动,加载,运行服务提供者。
1. 服务提供者在启动时,向注册中心注册自己提供的服务。
2. 服务消费者在启动时,向注册中心订阅自己所需的服务。
3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

timeout 和 retire 的 优先级别如下图:


dubbo 重试机制 retires 默认2次

假设服务端设置为 <dubbo:provider delay="-1"  timeout="9000" retries="2"></dubbo:provider>,客户端不进行设置。

consumer调用 provider的 insert 服务时,本次调用由于某种原因 provider没能在50秒内完成(假设provider的 insert 需要60 秒完成),consumer 会发起第一个重复请求,此次请求还是没有结果(因为 provider 60秒才能完成),第二次重复发起请求,依然没有结果。此时会返回一个com.alibaba.dubbo.remoting.TimeoutException ,但 provider 却执行了总共三次的操作(其中retire 2次),此时可以设置 客户端  设置该insert方法 的 retire 为 0:

   <dubbo:reference interface="com.xxx.content.service.ContentService" id="contentService" >

       <dubbo:method name="insert" retries="0"></dubbo:method>

   </dubbo:reference>



猜你喜欢

转载自blog.csdn.net/Black__sheep/article/details/80780895