dubbo---------timeout与retires
2024-09-07 23:41:43
相信很多人都见过这张图,这张图说明了提供者与消费者之间的关系,下面就介绍一下这个图是什么意思。
1.角色解释:
Provider: 暴露服务的服务提供者。
Consumer: 调用远程服务的服务消费者。
Registry: 服务注册与发现的注册中心。
Monitor: 统计服务的调用次调和调用时间的监控中心。
Container: 服务运行容器。
2.调用关系流程:
a.服务容器负责启动,加载,运行服务提供者。
b.服务提供者在启动时,向注册中心注册自己提供的服务。
c.服务消费者在启动时,向注册中心订阅自己所需的服务。
d.注册中心给消费者返回服务提供者地址列表,如果有变更,注册中心将基于长连接推送变更数据给消费者。
e. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
f.服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
3.dubbo超时与重试机制:
如果没有设置dubbo超时时间,那么dubbo会采用默认超时时间即1000ms。dubbo重试机制 retires 默认为2次。timeout 和 retire 的 优先级别如下图:
在dubbo的provider和consumer的配置文件中,如果都配置了timeout的超时时间,dubbo默认采用consumer的配置为准。
我在开发的时候,dubbo超时设置是设置在消费方的,这个根据不同的业务场景可自行配置设置。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <dubbo:application name="${dubbo.application.name}" owner="dengw" />
<dubbo:registry protocol="zookeeper" address="${dubbo.registry.address}" timeout="${dubbo.zookeeper.timeout}" register="true"/>
<dubbo:monitor protocol="registry" />
<dubbo:protocol port="${dubbo.protocol.port}"/> <!-- *****************************生产者***************************** -->
<dubbo:service ref="orderContractYmt" interface="com.ibank.order.api.OrderContract" protocol="dubbo" />
<dubbo:service ref="callBackContractYmt" interface="com.ibank.order.api.CallBackContract" protocol="dubbo" />
<dubbo:service ref="repayListContractYmt" interface="com.ibank.order.api.RepayListContract" protocol="dubbo" />
<dubbo:service ref="auditingOrderContractYmt" interface="com.ibank.order.api.AuditingOrderContract" protocol="dubbo" />
<dubbo:service ref="testStatusContractYmt" interface="com.ibank.order.api.TestStatusContract" protocol="dubbo" />
<dubbo:service ref="orderInfoContractYmt" interface="com.ibank.order.api.OrderInfoServiceContract" protocol="dubbo" /> <!--*****************************消费者***************************** --> <dubbo:reference id="appProductContractYmt" interface="com.ibank.product.api.AppProductContract" timeout="1000000" check="false" />
<dubbo:reference id="userBankContractYmt" interface="com.ibank.user.api.UserBankContract" timeout="1000000" check="false" />
<dubbo:reference id="userIdentityContractYmt" interface="com.ibank.user.api.UserIdentityContract" timeout="1000000" check="false" />
<dubbo:reference id="userAccountContractYmt" interface="com.ibank.user.api.UserAccountContract" timeout="1000000" check="false" />
<dubbo:reference id="userAccountContractNyd" interface="com.nyd.user.api.UserAccountContract" timeout="1000000" check="false" />
<dubbo:reference id="userStepContractYmt" interface="com.ibank.user.api.UserStepContract" timeout="1000000" check="false" />
<dubbo:reference id="userContactContractYmt" interface="com.ibank.user.api.UserContactContract" timeout="1000000" check="false" />
<dubbo:reference id="sendSmsServiceYmt" interface="com.ibank.msg.service.ISendSmsService" timeout="1000000" check="false" />
<dubbo:reference id="beiaiContractYmt" interface="com.ibank.user.api.BeiAiContract" timeout="1000000" check="false" />
<dubbo:reference id="couponContractYmt" interface="com.ibank.activity.api.CouponContract" timeout="1000000" check="false" />
<dubbo:reference id="userIdentityContract" interface="com.nyd.user.api.UserInfoContract" timeout="1000000" check="false" />
<dubbo:reference id="UserStepContract" interface="com.nyd.user.api.UserStepContract" timeout="1000000" check="false" />
<dubbo:reference id="orderContract" interface="com.nyd.order.api.OrderContract" timeout="1000000" check="false" /> </beans>
o4.最后跟大家分享一个面试题:
面试题:Dubbo中zookeeper做注册中心,如果注册中心集群全都挂掉,发布者和订阅者之间还能通信么?
可以的,消费者在启动时,消费者会从zk拉取注册的生产者的地址接口等数据,缓存在本地。每次调用时,按照本地存储的地址进行调用,倒是无法从注册中心去同步最新的服务列表,短期的注册中心挂掉是不要紧的,但一定要尽快修复。
认
最新文章
- TNS-12535: TNS:operation timed out案例解析
- 加密web.config
- [Docker] docker 基础学习笔记6(共6篇)
- 配置ubuntu虚拟机备忘
- 安卓开发经验分享:资源、UI、函数库、测试、构建一个都不能少(转)
- php源码之计算两个文件的相对路径
- 安卓手机开机开启指定Activity
- 使用Kibana 分析Nginx 日志并在 Dashboard上展示
- ";rel=nofollow";属性简介
- 转载:性能优化——统计信息——SQLServer自动更新和自动创建统计信息选项
- cmd命令。
- [转载]mac下homebrew的使用
- 黑魔法__attribute__((cleanup))
- 基于stm32f103zet6的FAT16文件系统学习0(读SD卡扇区)
- 初探ListView和Adapter
- Run QTP script wiht host in HPQC
- VSTO 基础随笔
- 你不可不知的Java引用类型【总结篇】
- java.io.OutputStream &; java.io.FileOutputStream
- RocketMQ 消息存储
热门文章
- bzoj3427:[POI2013]BAJ-Bytecomputer
- J - 吉哥系列故事――恨7不成妻
- 最新的vue没有dev-server.js文件,如何进行后台数据模拟?
- 如何使用程序调用webApi接口
- Unity Shader入门精要学习笔记 - 第10章 高级纹理
- Function ereg() is deprecated in
- PLSQL连接Oracle64监听和服务的配置!
- 从Assets读取文件 用scanner扫描inputstream
- [翻译] API测试的最佳实践 - 介绍
- vector容器类型