关于dubbo的超时处理及重试原则

 更新时间:2023年08月08日 10:29:14   作者:一切为了实战  
这篇文章主要介绍了关于dubbo的超时处理及重试原则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

由于网络或服务端不可靠,会导致调用出现一种不确定的中间状态(超时)。

为了避免超时导致客户端资源(线程)挂起耗尽,必须设置超时时间。

超时时间可以使用 timeout="超时次数" 来设置当消费者请求一个服务时出现错误,会重试连接其他的服务器,但重试会带来更多的延迟。

重试次数可以使用 retries=重试次数 来设置。

1. 注解配置如下

  • 在提供者中,reties的值设置在@Service中
  • 在消费者中,reties的值设置在@Reference中
  • 为模拟连接失败,可以采用超时连接;

具体步骤:

  • 1.在提供者分服务中添加一个睡眠时间为5秒
  • 2.设置消费者访问服务的超时时间为3秒,当服务在3秒后还没有得到结果就会连接失败,并设置次数为2次,虽然设置的次数是2,但是方法会执行3次,第一次是本来就会连的,第二次开始就算入了重试次数
  • 3.如果消费者配置了重试次数,提供者也配置了重试次数,则以消费者为准;

消费者的配置

@Service
public class OrderServiceImpl implements OrderService {
	@Reference(timeout=3000, retries=2)
	private UserService userService;
	@Override
	public List<Address> getAddress(String userId) {
		return userService.getAddress();
	}
}

提供者的配置

@Service(retries=5)
public class UserServiceImpl implements UserService{
	private static List<Address> address = new ArrayList<>();
	static {
		address.add(new Address(1, "武汉", "young"));
		address.add(new Address(2, "河源", "xian"));
	}
	@Override
	public List<Address> getAddress() {
		System.out.println("provider---1");
		return address;
	}
}

2. 在xml文件中配置

在xml文件中配置有多个级别,一个是全局级配置,一个是接口级配置,一个是方法级配置;

在提供者中的配置

方法一,全局级配置:

<dubbo:provider timeout="超时时间" retries="2"></dubbo:provider>

方法二,接口级配置:

<dubbo:service interface="com.young.service.UserService" ref="userServiceImpl" timeout="超时时间" retries="重试次数">
		<dubbo:method name="getAddress"></dubbo:method>
	</dubbo:service>

方法三,方法级配置:

<dubbo:service interface="com.young.service.UserService" ref="userServiceImpl" >
		<dubbo:method name="getAddress" timeout="超时时间" retries="重试次数"></dubbo:method>
</dubbo:service>

其中方法级的配置的优先级>接口级配置的优先级>全局级配置的优先级

在消费者中的配置

方法一,全局级配置:

<dubbo:consumer timeout="超时时间" retries="重试次数"></dubbo:consumer>

方法二,接口级配置

<dubbo:reference interface="com.young.service.UserService" id="userService"  timeout="超时时间" retries="重试次数">
	<dubbo:method name="getAddress" timeout="3000" retries="2"></dubbo:method>
</dubbo:reference>

方法三,方法级配置:

<dubbo:reference interface="com.young.service.UserService" id="userService">
	<dubbo:method name="getAddress" timeout="超时时间" retries="重试次数"></dubbo:method>
</dubbo:reference>

和提供者一样,消费者的优先级顺序为方法级的配置的优先级>接口级配置的优先级>全局级配置的优先级

配置的原则

dubbo推荐在Provider上尽量多配置Consumer端属性:

  • 作为服务的提供者,比服务方更清楚服务性能的参数,如调用时间,合理的重试次数等,所以这些参数应尽量配置在服务的提供者方;
  • 在provider配置后,Consumer不配置则会使用provider的配置值,即provider的配置会作为consumer配置的缺省值。如果使用consumer的全局配置,这对于provider是不可控的,并且是不合理的。

配置的覆盖规则

  • 方法级的配置的优先级>接口级配置的优先级>全局级配置的优先级,即遵循就近原则,以此为基础;
  • 在同级情况下,消费者的优先级大于提供者的优先级;
  • 优先级高的会将优先级低的覆盖;

timeout和retries是两个不同的参数,可以设置在不同的级别,但都遵循覆盖原则。

以上面的覆盖规则可以得到如下的所有情况:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 基于restTemplate遇到的编码问题及解决

    基于restTemplate遇到的编码问题及解决

    这篇文章主要介绍了restTemplate遇到的编码问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • Java数据脱敏的常用方式总结

    Java数据脱敏的常用方式总结

    大家好!今天我们要聊一聊数据脱敏,这个词听起来像特工电影里的高科技武器,其实它就是给敏感数据穿上“伪装衣”,防止“坏人”偷 窥,Java 提供了多种数据脱敏方式,今天咱们来聊几种经典实用的“伪装术”,感兴趣的小伙伴跟着小编一起来看看吧
    2024-11-11
  • 解决Maven中关于依赖导入不进的问题

    解决Maven中关于依赖导入不进的问题

    这篇文章主要介绍了解决Maven中关于依赖导入不进的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • idea2023.3安装及配置详细图文教程

    idea2023.3安装及配置详细图文教程

    IDEA全称IntelliJ IDEA,是Java语言对的集成开发环境,IDEA在业界被认为是公认最好的Java开发工具,这篇文章主要给大家介绍了关于idea2023.3安装及配置的相关资料,需要的朋友可以参考下
    2023-11-11
  • java.lang.UnsupportedOperationException的问题解决

    java.lang.UnsupportedOperationException的问题解决

    本文主要介绍了java.lang.UnsupportedOperationException的问题解决,该错误表示调用的方法不被支持或不可用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-07-07
  • SpringBoot中加密模块的使用

    SpringBoot中加密模块的使用

    本文主要介绍了SpringBoot中加密模块的使用,包括对称加密、非对称加密和哈希加密等,同时还会提供相应的代码示例,感兴趣的朋友可以参考一下
    2023-05-05
  • springboot返回前端中文乱码的解决

    springboot返回前端中文乱码的解决

    这篇文章主要介绍了springboot返回前端中文乱码的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • plantuml画图实现代码画时序图UML用例图

    plantuml画图实现代码画时序图UML用例图

    这篇文章主要为大家介绍了plantuml画图实现代码画时序图示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • 详解Spring MVC的拦截器与异常处理机制

    详解Spring MVC的拦截器与异常处理机制

    这篇文章主要为大家详细介绍了Spring MVC的拦截器与异常处理机制,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • java8 stream的分组功能实例介绍

    java8 stream的分组功能实例介绍

    这篇文章主要给大家介绍了关于java8 stream的分组功能的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用java8具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-12-12

最新评论