前面提到过,重试是靠ClusterInvoker来保证的,不同的Cluster在调用失败的时候 做不同处理

比如默认的FailoverClusterInvoke的doInvoke方法里面:
int len = getUrl().getMethodParameter(invocation.getMethodName(), Constants.RETRIES_KEY, Constants.DEFAULT_RETRIES) + 1;
这个RETRIES_KEY就是重试次数,在后面的代码
for (int i = 0; i < len; i++)
这个就是用来在出现异常的时候,是继续调用,还是做其他处理,这个不同的ClusterInvoker实现是不同的。
比如FailoverClusterInvoker里面就是吞掉异常继续调用,除非次数用完,才真正抛出异常。

有个问题是经常调用方已经调用了,结果本地dubbo超时,继续又调用一次,可能导致consumer那边调用了两次,所以一般都是重试都是业务代码控制的。
为啥这样,还是因为FailoverClusterInvoker不区分超时Excpetion,虽然有不同错误码,但是如果是timeoutException,还是会继续重试

另外:
if (i > 0) {
checkWhetherDestroyed();
copyinvokers = list(invocation);
// check again
checkInvokers(copyinvokers, invocation);
}

这一句表示如果第一次调用失败,那么需要重新做一次list,也就是通过
List<Invoker<T>> invokers = directory.list(invocation);
return invokers;
让directory去注册中心重新拿一次,有可能这个时候provider已经发生变化

转载于:https://www.cnblogs.com/notlate/p/10090867.html

为什么dubbo的调用重试不建议设置成超过1相关推荐

  1. Dubbo retries 超时重试机制的问题

    异常日志 [com.alibaba.dubbo.rpc.filter.TimeoutFilter] - [DUBBO] invoke time out. method: sendMessageargu ...

  2. 面试杀手锏之Dubbo服务调用过程

    点赞再看,养成习惯,微信搜一搜[三太子敖丙]关注这个喜欢写情怀的程序员. 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点.资料以及我的系 ...

  3. 代码技巧——dubbo泛化调用

    现在有一种业务场景: (1)业务方B调用任务系统A,提交一个任务,由A保证任务尽可能的被执行成功(系统A自带幂等.重试),在A完成任务的执行后将执行情况同步回调通知B应用: (2)因此,B应用在提交任 ...

  4. dubbo单元测试调用_使用LocalTestServer对HTTP调用进行单元测试

    dubbo单元测试调用 有时候,您正在对远程服务器进行HTTP调用的单元测试代码. 您可能正在使用诸如Apache'sHttpClient或Spring的RestTemplate之类的库. 当然,您不 ...

  5. 限时购校验小工具dubbo异步调用实现限

    本文来自网易云社区 作者:张伟 背景 限时购是网易考拉目前比较常用的促销形式,但是前期创建一个限时购活动时需要各个BU按照指定的Excel格式进行选品提报,为了保证提报数据准确,运营需要人肉校验很多信 ...

  6. 理解Dubbo的调用流程与Dubbo多协议解析

    Dubbo作为目前国内主流的微服务框架之一 一.Dubbo的调用流程分析 Dubbo本身主要支持两种调用流程,包括直连提供者和基于注册中心的调用 直连提供者一般都是在开发和测试环境下使用 我们将所有的 ...

  7. Kafka Producer重试参数retries设置取舍

    Kafka Producer重试参数retries设置取舍 retries参数在版本0.11.3 建议设置 retries = Integer.MAX_VALUE max.in.flight.requ ...

  8. Dubbo泛化调用处理序列化问题

    知其然要知其所以然,刚好趁这个机会把博客重新捡起来. 之前项目的目的是处理dubbo泛化调用的返回值,处理LocalDateTim,LocalDate,LocalTime.转换为时间戳. 一.如何泛化 ...

  9. dubbo的调用原理及泛化调用

    简单介绍 dubbo是阿里开源出来的一个rpc框架,主要是用于微服务分布式项目的远程调用,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现,下面是调用的原理图: ...

最新文章

  1. 人工智能顶级会议ICLR取消线下会议:远程出席、视频演讲
  2. 【Linux】一步一步学Linux——Linux版本(03)
  3. Java学习--多态
  4. 解决SublimeCodeIntel回车换行误打代码
  5. java之NIO(Channel,Buffer,Selector)
  6. MFC制作打地鼠小游戏
  7. 华gt2升级鸿蒙,华为手表GT2 Pro已开始内部测试,升级鸿蒙操作系统
  8. 06-01 搭建持续集成平台 Jenkins
  9. socket是什么?
  10. 用习惯了windows系统要怎样去认识linux系统(三)
  11. linux DISPLAY变量
  12. 微信蓝牙协议二:1800 or 18914E结尾和Varint压缩算法
  13. Everything搜索_使用方法
  14. 读计算机网络得学五笔吗,新手学五笔打字的步骤
  15. ios 纯代码怎么适配ipad_iOS屏幕适配(纯代码)
  16. Windows 的应急事件分类-
  17. Unity游戏结构与引擎视图
  18. 英语 译林 2019 单词表
  19. SpringMVC中注解和非注解形式配置
  20. TCP/IP知识总结面试题之Socket服务

热门文章

  1. JS-this的使用
  2. bzoj 1124 [POI2008]枪战Maf 贪心
  3. 一周学会HTML----Day03常用标签(下)
  4. Office开发程序集版本及部署问题
  5. php构造数组,并把多数组插入php文件
  6. 2007白领职场成功需要哪“十商”
  7. 安卓 sharedpreferences可以被其它activity读取_Google|再见 SharedPreferences 拥抱 Jetpack DataStore...
  8. 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器,sqlserver
  9. auot lisp 选择集处理_离散量的计算机处理63_1Cv6
  10. 整数因子分解c语言递归,整数因子分解:计算一个整数所有的分解式(递归实现)...