开发者学堂课程【阿里巴巴分布式服务框架 Dubbo 快速入门:重试次数】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/624/detail/9468
重试次数
内容介绍:
一、什么是重试次数
二、进行重试次数测试
三、重试次数的配置方法
一、什么是重试次数
超时属性一般配合 retries 重试次数使用,重复次数在开发中用的也很多,当某一个服务由于各种原因,如网络不佳、运行缓慢等等导致超时,方法远程调用失败,可以通过调整重试次数多试几次,重试次数是一个整数,不包含第一次调用。
例如:retries=“3“,第一次调失败了,额外还会再试三次,直到三次以内有一次成功,最多会试四次不包含第一次。
二、进行重试次数测试
来到服务提供方,需要远程调用 System.out.println(“UserServiceImpl……1…”),启动调用服务提供方,注册在注册中心中,调用提供方服务,测试结果过一段时间显示超时,看控制台,发现 UserServiceImpl……1…打印了4次,即第一次失败了,又打印三次。
重试机制如果在有多个服务提供方的情况下,例如订单服务调用户服务,如果用户服务放了三个,第一次调会默认调第一个用户服务,若调用失败了,还可以自动重试其他机器相同功能的用户服务是否可以。
进行测试,重试次数依旧是3个,把服务的提供方启用上三个,让第一个服务提供方20080先启动,若它被调用,控制台打印的是 UserServiceImpl……1…;
服务提供方第二个再次进行启用,用20881端口,若它被调用,控制台打印的是 UserServiceImpl……2…;服务提供方第三次进行调用,端口为20882,控制台打印的是 UserServiceImpl……3…。刷新注册中心,发现提供者有3个,分别在20881、20882、20883,点进来都是 User Service,方法是 getUserAddressList。
把超时配在消费方,依然超时报错,看一下控制台,UserServiceImp……1…打印了两次,UserServiceImp……2…打印了一次,UserServiceImp……3…打印一次,正好是4次,既重试次数也重试了其他服务器,由于第一次请求默认来到 UserServiceImp……1…,试过之后发现第一次请求出错了,再重试一下还出错,直接来到下一个 UserServiceImp……2…再试一下,出错后再来到 UserServiceImp……3…,如果有很多个,在重试次数以内只要有一个调用成功,本次就调用成功。
三、重试次数的配置方法
重试次数应该在合适的情况下设置,一般可将方法分为幂等操作和非幂等操作。
1、幂等操作
在幂等操作的基础上可以设置重试次数,提升系统的性能;所谓的幂等即不管运行多少次,最后的结果都是一个效果。
例如操作数据库中的查询、删除、修改(同样的请求,同样的方法带同样的参数,无论执行多少次产生的效果和执行一次产生的效果是一样的),这种叫做
幂等。
2、非幂等操作
在非幂等方法上,不能设置重试次数。非幂等即每一次方法运行都会产生新的效果,比如数据库的新增。此外 retries=“0“代表不重试。