相信很多人都见过这张图,这张图说明了提供者与消费者之间的关系,下面就介绍一下这个图是什么意思。

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拉取注册的生产者的地址接口等数据,缓存在本地。每次调用时,按照本地存储的地址进行调用,倒是无法从注册中心去同步最新的服务列表,短期的注册中心挂掉是不要紧的,但一定要尽快修复。

 
 

dubbo---------timeout与retires的更多相关文章

  1. Dubbo(2)--Dubbo常用配置文件解析及核心源码阅读

    1.多版本支持 服务端 创建第二个接口实现类 package com.lf; public class HelloImpl2 implements IHello{ @Override public S ...

  2. dubbo学习笔记(一)超时与重试

    dubbo提供在provider和consumer端,都提供了超时(timeout)和重试(retries)的参数配置. 配置方式 provider端在<dubbo:service>中配置 ...

  3. 分布式框架Dubbo入门

    Dubbo简介 Dubbo是一个Alibaba开源额分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案.dubbo就是个服务框架,只有在分布式的时候,才有dubb ...

  4. dubbo 调用服务超时

    先贴出错误报告: Failed to invoke the method *** in the service ***. Tried times of the providers [] (/) on ...

  5. 初识dubbo

    1. 为什么需要 Dubbo(摘自http://dubbo.apache.org/zh-cn/docs/user/quick-start.html) 随着互联网的发展,网站应用的规模不断扩大,常规的垂 ...

  6. dubbo.provider和dubbo.consumer配置

    Configure service provider <?xml version="1.0" encoding="UTF-8"?> <bean ...

  7. batchGetAnchorLevel(dubbo接口)

    一.编写脚本前的准备工作 1.安装idea,安装本地maven库,并在idea里面配置maven 2.导入git源码(目的在于下载所依赖的基础包)-->File-new-Project from ...

  8. dubbo注册zookeeper保错原因

    我的zookeeper是安装在本地,用的默认端口2181,版本3.4.10.dubbo版本2.5.8.dubbo-demo-provider.xml配置文件修改为:<dubbo:registry ...

  9. spring-boot系列:(一)整合dubbo

    spring-boot-2整合dubbo 新框架学习,必须上手干.书读百遍,其义自见. 本文主要介绍spring-boot-2整合dubbo,使用xml配置实现一个provider和consumer. ...

随机推荐

  1. windows如何搭建redis集群

    操作系统:win10 64位 redis版本:3.2.1-x64 ruby版本:2.5.1-1-x64 rubygems版本:2.7.6 今天突然想简单的搭建一个redis的集群,因为系统是Windo ...

  2. StringUitl工具类中的一种写法

    typeHandlersPackageArray = StringUtils.tokenizeToStringArray(this.typeAliasesPackage, ",; \t\n& ...

  3. VLAN-5-802.1Q-in-Q隧道

    Q-in-Q允许SP在跨越WAN服务时,保留802.1Q VLAN标签.由此,VLAN可以被拓展到多个地理分散的站点上.     入向SP交换机收到802.1Q数据帧,使用额外的802.1Q头部来标记 ...

  4. spring+mybits 整合所需jar包的下载路径(亲测有效)

    1.spring jar包:http://repo.springsource.org/libs-release-local/org/springframework/spring/5.0.0.RELEA ...

  5. CF #541div2 E

    题目本质:忽略串的变化,只记载26个字母的相关变化. 解决方法: 在上一次与本次的转移过程中,情况并不多,主要取决于本次串的首尾字母,若不是本次的首尾字母,会被置1:如果是的话,分情况接一下并更新.另 ...

  6. GYM 101889E(dp)

    dp[i][j][k]表示第i位填数字k时,与后面的相连模数为j时,后面的数字最小填多少. 测得我提心吊胆还以为复杂度高了,结果出来46ms还是cf评测姬强啊. #pragma comment(lin ...

  7. jQuery height() innerHeight() outerHight() width() innerWidth() outerWidth()源码解读

    在第二层each,传入的对象以height举例是这样的,{padding:innerHeight,content:height,"":outerHeight} 对它遍历调用func ...

  8. CSS浮动float父div没有高度的问题

    如下所示,子元素 div2 本身具有高度和宽度,但由于其具有float:left:属性后.其父元素 div1 不具有高度. <html>    <head>    </h ...

  9. 系统讲解一下,Dao,Entity,Servlet,Action各自有什么东西-Java/Web开发

    dao 主要是一些接口,里面定义了一些用于增删改查的方法名 daoImpl 就是对dao的具体实现 Service 同上,也是一些接口,主要是用来调用dao层的一些方法,所以这里定义的方法一般都定义好 ...

  10. uvm_scoreboard——得分

    scoreboard 是验证平台很重要的一部分,因为,验证就是给激励,然后,检查结果.而scoreboard 就是肩负这检查结果的重任.测试用例能不能过,全由scoreboard说了算. A scor ...