超时&配置覆盖关系|学习笔记

简介: 快速学习超时&配置覆盖关系

开发者学堂课程【阿里巴巴分布式服务框架 Dubbo 快速入门超时&配置覆盖关系】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/624/detail/9467


超时&配置覆盖关系


内容简介:

一、超时设置及代码

二、进行配置

三、配置生效的两个规则


一、超时配置及代码

前面测试了启动时检查这个配置,接下来测试 timeout,即超时设置。

代码为:

<!--timeout=”0”超时-->

<dubbo:reference interface=”com.atguigu.gmall.service.UserService”

Id=”userService” timeout=”0”></dubbo:reference>

超时是用来服务消费方来引用服务提供方时,可能由于网路原因等等,服务提供方要执行一个方法,可能会有很长时间,如果很长时间都没有返回,导致大量线程在这阻塞,可能会引起性能下降,为了解决这个问题,可以指定上超时属性,只要这个方法在指定时间内没有返回,那就立即终止,不让线程大量阻塞。超时设置的单位时毫秒,若 timeout=“3000“,则默认是3秒。


二、进行配置

写一下服务提供者

try{

Thread.sleep(4000);

}catch(InterruptedException   e)  {

//TODO Auto-generated catch block

e.printStackTrace();

}

把服务提供者注册进来,启动注册到注册中心,服务消费者来调用提供者的功能,打开调用代码OrderService orderService=applicationContext.getBean(OrderService.class)

orderService.initOrder(“1”);

(注:在服务提供者已配置超时属性,若没有配置超时属性,需等待调用完成)

启动一下,结果为用户 id,1已经进来,但后续出现报错,报错为 Wating service-side responsetimeout.(等待服务端响应已经超时),但我们并没有设置超时时间,说明超时有一个默认值,在 schema 参考手册中,找到 dubbo:reference,默认使用的是的 timeout,打开 dubbo:consumer 默认值

为1000,也就是说 dubbo 为了考虑服务快速响应,默认超时为1000毫秒。

<!--timeout=”0”默认是1000毫秒-->

<dubbo:reference

interface=”com.atguigu.gmall.service.UserService”

Id=”userService” timeout=”3000”></dubbo:reference>

我们设置 timeout=“3000”,这样也是超时的;

方法 Thread.sleep(4000)至少4000ms才能出来,为了能调用成功,超时 Id=”userService” timeout=”5000”>应写5000ms,重新测试,结果显示调用完成,说明我们超时属性设置有作用了。同样我们知道 dubbo:reference 设置是为单个设置的,dubbo:consumer 是全体设置的,即可在全体设置里设置超时,但规则到底是谁起作用呢,在 XML 配置里,有一处为配置覆盖关系,

下图展示了配置的优先级,越上边是优先起作用的,越下边是后来起作用的。

image.png

image.png

方法级优先,接口级次之,全局配置再次之。

超时属性不仅能配置在 dubbo:reference 标签上,还能有一个<dubbo:method>,method 精确配置 userservice 的方法,例如<dubbo:method name=”getUserAddressList” timeout=“1000“>,即明确指定 geuUserAdressList 方法的超时时间,那么这个超时时间是1000生效还是 id=”userService timeout=“5000”超时时间5000生效,如果1000生效的话要睡4秒多,那么就调用失败了,5000调用成功了,重新测试,发现调用失败,响应超时。

总结一下:

方法级优先,接口级次之,全局配置再次之。还可以用 consumer 配置所有接口,代码为<dubbo:consumer check=”false” timeout=”5000”></dubbo:consumer>

//<配置当前消费者统一规则所有服务都不检查>

方法精确优先,如果没配方法,就用 id=”userService timeout=“5000”这个超时时间,若这个也没有配置,则用<dubbo:consumer check=”false”timeout=”5000”></dubbo:consumer这个超时时间


三、配置生效的两个规则

第一个是精确优先(方法级优先、接口级次之、全局配置再次之)

第二个是消费者配置优先(如果级别一样,则消费方优先,提供方次之)

方法级别的精确级别:

<dubbo:reference>配置:是在服务消费方,引用远程服务时。reference 是消费方引用时优先。

<dubbo:service>配置:服务提供方暴露自己服务时。提供方自己引用时不优先。

接口级别:

<dubbo:reference>

<dubbo:service>

全局配置:

<dubbo:consumer>

<dubbo:provider>

统一设置服务提供方规则为:<dubbo:provider timeout=”1000”>

方法级别在最上面,接口级别在中间,全局配置在最后;每一个级别中都是消费方级别优先,提供方配置次之。

在服务消费方配置一个接口级别的配置超时时间是5000,而在服务提供方配置一个方法级别精确的超时时间为1000,代码为<dubbo:method name=”getUserAddressList timeout=”1000”>,此时这个情况时精确优先还是消费方优先呢,将以前服务停掉,重新注册服务提供者,重新调用服务消费者,结果显示调用失败,说明在服务提供者里方法级别中的1000是起作用的,消费者并没有优先级作用,正是因为级别一样的情况下,消费方优先,提供方次之。

以上是以 timeout 为,显示了配置的查找顺序,其它 retries,loadbanlance,actives 等类似,据按照配置规则。

相关文章
|
Java
jvisualvm安装并查看GC过程
jvisualvm安装并查看GC过程
294 0
|
2月前
|
Kubernetes Cloud Native 异构计算
133_云端扩展:Kubernetes scaling - 设置自动缩放的阈值与LLM部署最佳实践
在大语言模型(LLM)部署的时代,如何高效地管理计算资源、应对动态负载并优化成本,成为了每个AI工程师必须面对的挑战。随着LLM应用的普及,用户请求模式变得日益复杂且难以预测,传统的静态资源配置方式已无法满足需求。Kubernetes作为云原生时代的容器编排平台,其强大的自动扩展能力为LLM部署提供了理想的解决方案。
|
5月前
|
前端开发 安全 Java
办公自动化必修课:用Python打造PDF全能处理工具
在职场中,PDF处理常令人崩溃:拆分、合并、加密等问题严重影响效率。本文教你用Python打造一个包含拆分、合并、加密、水印四大功能的PDF工具箱,通过实战代码提升办公自动化水平,让文档操作像拼乐高一样简单高效。
195 0
|
设计模式 关系型数据库 测试技术
进阶技巧:提高单元测试覆盖率与代码质量
【10月更文挑战第14天】随着软件复杂性的不断增加,确保代码质量的重要性日益凸显。单元测试作为软件开发过程中的一个重要环节,对于提高代码质量、减少bug以及加快开发速度都有着不可替代的作用。本文将探讨如何优化单元测试以达到更高的测试覆盖率,并确保代码质量。我们将从编写有效的测试用例策略入手,讨论如何避免常见的测试陷阱,使用mocking工具模拟依赖项,以及如何重构难以测试的代码。
513 4
|
小程序 前端开发
【微信小程序】-- 常用的基础内容组件介绍 -- text & rich-text & progress & icon(七)
【微信小程序】-- 常用的基础内容组件介绍 -- text & rich-text & progress & icon(七)
|
人工智能 边缘计算 监控
边缘AI计算技术应用-实训解决方案
《边缘AI计算技术应用-实训解决方案》提供完整的实训体系,面向高校和科研机构的AI人才培养需求。方案包括云原生AI平台、百度AIBOX边缘计算硬件,以及8门计算机视觉实训课程与2门大模型课程。AI平台支持大规模分布式训练、超参数搜索、标注及自动化数据管理等功能,显著提升AI训练与推理效率。硬件涵盖多规格AIBOX服务器,支持多种推理算法及灵活部署。课程涵盖从计算机视觉基础到大模型微调的完整路径,通过真实商业项目实操,帮助学员掌握前沿AI技术和产业应用。
567 2
|
IDE Java 开发工具
解决非Spring Bean访问Spring Bean的问题:实用指南
在非SpringBean类中直接获取SpringBean可能会引发问题,例如上面案例里提到的空指针和自动装配失败。为避免这些问题,建议将需要访问Spring Bean的类也注册为Spring Bean,以确保依赖关系得到正确管理。
391 0
|
机器学习/深度学习 数据采集 TensorFlow
【Python机器学习专栏】使用Python进行图像分类的实战案例
【4月更文挑战第30天】本文介绍了使用Python和深度学习库TensorFlow、Keras进行图像分类的实战案例。通过CIFAR-10数据集,展示如何构建和训练一个卷积神经网络(CNN)模型,实现对10个类别图像的识别。首先安装必要库,然后加载数据集并显示图像。接着,建立基本CNN模型,编译并训练模型,最后评估其在测试集上的准确性。此案例为初学者提供了图像分类的入门教程,为进一步学习和优化打下基础。
631 0
|
设计模式 算法 C++
从 C++ 优化状态机实现:结合设计模式的实用指南
从 C++ 优化状态机实现:结合设计模式的实用指南
859 1
|
Java Linux Apache
win环境-maven的安装以及配置(idea中的配置,setting文件修改,环境变量配置)
win环境-maven的安装以及配置(idea中的配置,setting文件修改,环境变量配置)
651 2