dubbo---------timeout与retires

相信很多人都见过这张图,这张图说明了提供者与消费者之间的关系,下面就介绍一下这个图是什么意思。
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拉取注册的生产者的地址接口等数据,缓存在本地。每次调用时,按照本地存储的地址进行调用,倒是无法从注册中心去同步最新的服务列表,短期的注册中心挂掉是不要紧的,但一定要尽快修复。
认
dubbo---------timeout与retires的更多相关文章
- Dubbo(2)--Dubbo常用配置文件解析及核心源码阅读
1.多版本支持 服务端 创建第二个接口实现类 package com.lf; public class HelloImpl2 implements IHello{ @Override public S ...
- dubbo学习笔记(一)超时与重试
dubbo提供在provider和consumer端,都提供了超时(timeout)和重试(retries)的参数配置. 配置方式 provider端在<dubbo:service>中配置 ...
- 分布式框架Dubbo入门
Dubbo简介 Dubbo是一个Alibaba开源额分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案.dubbo就是个服务框架,只有在分布式的时候,才有dubb ...
- dubbo 调用服务超时
先贴出错误报告: Failed to invoke the method *** in the service ***. Tried times of the providers [] (/) on ...
- 初识dubbo
1. 为什么需要 Dubbo(摘自http://dubbo.apache.org/zh-cn/docs/user/quick-start.html) 随着互联网的发展,网站应用的规模不断扩大,常规的垂 ...
- dubbo.provider和dubbo.consumer配置
Configure service provider <?xml version="1.0" encoding="UTF-8"?> <bean ...
- batchGetAnchorLevel(dubbo接口)
一.编写脚本前的准备工作 1.安装idea,安装本地maven库,并在idea里面配置maven 2.导入git源码(目的在于下载所依赖的基础包)-->File-new-Project from ...
- dubbo注册zookeeper保错原因
我的zookeeper是安装在本地,用的默认端口2181,版本3.4.10.dubbo版本2.5.8.dubbo-demo-provider.xml配置文件修改为:<dubbo:registry ...
- spring-boot系列:(一)整合dubbo
spring-boot-2整合dubbo 新框架学习,必须上手干.书读百遍,其义自见. 本文主要介绍spring-boot-2整合dubbo,使用xml配置实现一个provider和consumer. ...
随机推荐
- Apache与Tomcat的区别和联系
经常在用apache和tomcat等这些服务器,可是总感觉还是不清楚他们之间有什么关系,在用tomcat的时候总出现apache,总感到迷惑,到底谁是主谁是次,因此特意在网上查询了一些这方面的资料,总 ...
- jsp 预编译
jspc-maven-plugin <?xml version="1.0" encoding="UTF-8"?> <project xmlns ...
- python 基础(五) 迭代器与生成器
迭代器和生成器 迭代器 iterator (1) 迭代对象: 可以直接作用于for循环的 称为可迭代对象(iterable)可以通过 isinstance 判断是否属于可迭代对象 可以直接作用于for ...
- LM358与TL431验证
- ecshop属性 {$goods.goods_attr|nl2br} 标签的赋值相关
1.nl2br() 函数在字符串中的每个新行 (\n) 之前插入 HTML 换行符 (<br />). 2. 如果要向{$goods.goods_attr|nl2br}赋新值,这个值是保存 ...
- 安卓,IOS真机调试
移动端前端开发真机调试攻略 有线调试: 一.IOS 移动端 (Safari开发者工具) 手机端:设置 → Safari → 高级 → Web 检查器 → 开. mac端:Safari → 偏好设置 → ...
- 分享一套Code Smith 搭建N层架构模板
开篇 平常开发时,由于冗余代码过多,程序员做重复的工作过多势必会影响开发效率.倘若 对重复性代码简单的复制.粘贴,虽然也能节省时间,但也需仔细一步步替换,这无疑也是一件费力的事.这时我们急需代码生成工 ...
- 实现如下语法的功能:var a = add(2)(3)(4)
function add(num){ var _add = function(args){ num+=args; return arguments.callee; } _add.toString = ...
- ubuntu快捷键收集
Ctrl+Alt+T 终端 -Ctrl+Shift+C 终端复制 -Ctrl+Shift+V 终端粘贴 -Ctrl+L 清屏 -Ctrl+; 从剪切板中获得输入提示(不小心点到被诡异的提示吓到了) - ...
- Spark-水库抽样-根据抽样率确定每个分区的样本大小
/* * 输入:采样率,待采样的RDD * 输出:每个分区的样本大小(记录数) * 由采样率确定,每个分区的样本大小 */ def findNumPerPartition[T: ClassTag, U ...