1多版本支持

应用:对一个接口进行的升级的时候,新的接口可能会和之前的版本有冲突,进行版本号的控制,进行灰度发布,对新的功能加版本进行隔离。(version=1.0.1)

添加新的实现类 UpHelloImpl

dubbo-provider项目的 dubbo-server.xml文件修改  添加版本version控制

<dubbo:service interface="com.jiy.dubbo.IJIYHello" ref="jiyHelloService"  registry="zk1" version="1.0.0"/><dubbo:service interface="com.jiy.dubbo.IJIYHello" ref="UpHelloImpl" registry="zk1" version="1.0.1"/><bean id="UpHelloImpl" class="com.jiy.dubbo.UpHelloImpl"></bean><bean id="jiyHelloService" class="com.jiy.dubbo.JiyHelloImpl"></bean>

在client端 dubbo-client.xml文件 添加对版本的指定

 <dubbo:reference interface="com.jiy.dubbo.IJIYHello" id="demoService" version="1.0.1" check="false"/>

2 主机绑定

private String findConfigedHosts(ProtocolConfig protocolConfig, List<URL> registryURLs, Map<String, String> map) {boolean anyhost = false;。。。。。。。//从配置文件中获得绑定地址String hostToBind = getValueFromConfig(protocolConfig, DUBBO_IP_TO_BIND);// if bind ip is not found in environment, keep looking upif (StringUtils.isEmpty(hostToBind)) { //如果地址不为空hostToBind = protocolConfig.getHost();if (provider != null && StringUtils.isEmpty(hostToBind)) {hostToBind = provider.getHost();}if (isInvalidLocalHost(hostToBind)) {anyhost = true;try {logger.info( "No valid ip found from environment, try to find valid host from DNS.");hostToBind = InetAddress.getLocalHost().getHostAddress();} catch (UnknownHostException e) {logger.warn(e.getMessage(), e);}if (isInvalidLocalHost(hostToBind)) {if (CollectionUtils.isNotEmpty(registryURLs)) {//如果注册中心地址不为空for (URL registryURL : registryURLs) {if (MULTICAST.equalsIgnoreCase(registryURL.getParameter("registry"))) {// skip multicast registry since we cannot connect to it via Socketcontinue;}try (Socket socket = new Socket()) { //通过socket获得连接SocketAddress addr = new InetSocketAddress(registryURL.getHost(), registryURL.getPort());socket.connect(addr, 1000);hostToBind = socket.getLocalAddress().getHostAddress();break;} catch (Exception e) {logger.warn(e.getMessage(), e);}}}if (isInvalidLocalHost(hostToBind)) {hostToBind = getLocalHost();}}}}map.put(Constants.BIND_IP_KEY, hostToBind);。。。。。。。。return hostToRegistry;}

3 集群容错

允许在系统的控制范围内允许或者包容某些错误的发生。

客户端配置文件

 <dubbo:reference interface="com.jiy.dubbo.IJIYHello" cluster="failfast" id="demoService" version="1.0.1" check="false"/>

6中容错机制 设置cluster = (failsafe,failover,failfast。。。)

failsafe  失败安全

failover(默认) 失败后重试其他服务器   retries(2) 重试次数,不包含第一次

failfast 快速失败,失败以后立马报错

failback  失败后自动恢复

forking   forks设置并行的最大数。同时调用多个节点只要一个成功返回就以成功的为准

broadcast 广播调用,任意一台报错,则执行方法报错

查询语句默认使用failover   事务建议使用failfast
 

4 服务降级

容错是服务降级的一种实现方式。

降级的目的是为了保证核心服务可用,通过关闭一些服务,提高整体资源和架构的吞吐量。

dobbo降级方式 Mock。 可以在客户端进行。

定义Mock类

public class TestMork implements IJIYHello{@Overridepublic String sayHello(String s) {return "系统繁忙";}
}

配置文件添加  mock属性 指向定义的mork类

 <dubbo:reference interface="com.jiy.dubbo.IJIYHello" mock="com.jiy.dubbo.TestMork" id="demoService" version="1.0.1" check="false"/>

5 配置优先级别

客户端优于服务端 

      1方法级别优先、然后是接口、接着是全局配置

      2 如果级别一样,客户端优先

     timeout(服务端)  cluster(客户端)

6 什么是SPI

SPI 全称为 Service Provider Interface,是一种服务发现机制。SPI 的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。这样可以在运行时,动态为接口替换实现类。正因此特性,我们可以很容易的通过 SPI 机制为我们的程序提供拓展功能。SPI 机制在第三方框架中也有所应用,比如 Dubbo 就是通过 SPI 机制加载所有的组件。不过,Dubbo 并未使用 Java 原生的 SPI 机制,而是对其进行了增强,使其能够更好的满足需求。在 Dubbo 中,SPI 是一个非常重要的模块。基于 SPI,我们可以很容易的对 Dubbo 进行拓展。如果大家想要学习 Dubbo 的源码,SPI 机制务必弄懂。接下来,我们先来了解一下 Java SPI 与 Dubbo SPI 的用法,然后再来分析 Dubbo SPI 的源码。

链接地址http://dubbo.apache.org/zh-cn/docs/source_code_guide/dubbo-spi.html、

Dubbo学习(二)相关推荐

  1. Dubbo学习之DubboService

    相关阅读 Dubbo学习之PostProcessor Dubbo学习之DubboReference Dubbo学习之ReferenceBean Dubbo学习之ServiceBean 简介 本文基于S ...

  2. dubbo学习视频资料

    dubbo学习视频资料 请叫我小橙,橙橙 偶遇青春 Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成. ...

  3. C#多线程学习(二) 如何操纵一个线程

    C#多线程学习(二) 如何操纵一个线程 原文链接:http://kb.cnblogs.com/page/42529/ [1] C#多线程学习(二) 如何操纵一个线程 [2] C#多线程学习(二) 如何 ...

  4. spring security 学习二

    spring security 学习二 doc:https://docs.spring.io/spring-security/site/docs/ 基于表单的认证(个性化认证流程): 一.自定义登录页 ...

  5. STL源码剖析学习二:空间配置器(allocator)

    STL源码剖析学习二:空间配置器(allocator) 标准接口: vlaue_type pointer const_pointer reference const_reference size_ty ...

  6. mysql用创建的用户登陆并修改表格_MySQL 基础学习二:创建一个用户表,并增删改查...

    MySQL 基础学习二:创建一个用户表,并 增删改查 提示:MySQL 命令建议都用大写,因为小写运行时,还是翻译成大写的. 第一步,创建一个用户表 1,打开控制台,进入数据库 C:\Users\Ad ...

  7. OpenCV学习(二十四 ):角点检测(Corner Detection):cornerHarris(),goodFeatureToTrack()

    OpenCV学习(二十四 ):角点检测(Corner Detection):cornerHarris(),goodFeatureToTrack() 参考博客: Harris角点检测原理详解 Harri ...

  8. OpenCV学习(二十二) :反向投影:calcBackProject(),mixChannels()

    OpenCV学习(二十二) :反向投影:calcHist(),minMaxLoc(),compareHist() 参考博客: 反向投影backproject的直观理解 opencv 反向投影 颜色直方 ...

  9. OpenCV学习(二十一) :计算图像连通分量:connectedComponents(),connectedComponentsWithStats()

    OpenCV学习(二十一) :计算图像连通分量:connectedComponents(),connectedComponentsWithStats() 1.connectedComponents() ...

  10. OpenCV学习(二十) :分水岭算法:watershed()

    OpenCV学习(二十) :分水岭算法:watershed() 参考博客: OpenCV-分水岭算法 图像处理--分水岭算法 OpenCV学习(7) 分水岭算法(1) Opencv分水岭算法--wat ...

最新文章

  1. java计算两个文本框的值,java 文本框自动获取另外两个文本框的值的乘积
  2. linux 磁盘科隆,上海第二工业大学嵌入式操作系统B复习(无答案版)
  3. java uuid静态方法_Java UUID version()方法与示例
  4. Java:使用 Java 开发的一个异常处理框架
  5. TypeScript极速完全进阶指南-2中级篇
  6. freeradius+mysql+pptpd+radiusmanager 游戏×××代理站完整实验过程
  7. 《别输在不会表达上》— 综合素质提升书籍
  8. Spring Boot 1.5.2.RELEASE中文版
  9. 基于java的房地产客户管理系统
  10. MATLAB关于xlsread函数的用法
  11. HTTP请求头headers
  12. 计算机英语听力,计算机英语词汇大全
  13. 教你如何将小视频转发到自己的朋友圈
  14. 京东平台和商家的不同合作模式
  15. 为什么我们说“买东西”,而不说“买南北”?
  16. 通信机制之异步通信和同步通信
  17. leetcode 273. 整数转换英文表示[困难]
  18. 提醒事项 android,每日提醒 Pro-提醒事项、时间管理待办清单
  19. Pandas的 loc iloc ix 区别
  20. 战略地位与行动评价矩阵(转载)

热门文章

  1. Android 相机 LED 做手电筒
  2. opencv Histogram Equalization 直方图均衡。
  3. 如何从内容的角度迅速对作品的影视价值进行判断
  4. vue单页面通过prerender-spa-plugin插件进行SEO优化
  5. 2018年国家高级理财规划师CHFP考试取消了该怎么办?
  6. EasyCVR如何快速自定义修改级联国标设备的通道编号?
  7. ownCloud简介
  8. 实况足球8在window2003下不能游戏的解决方法
  9. oracle心跳线检测,Oracle-RAC集群心跳
  10. surfaceView、surface和sufaceHolder的关系