Dubbo学习(二)
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学习(二)相关推荐
- Dubbo学习之DubboService
相关阅读 Dubbo学习之PostProcessor Dubbo学习之DubboReference Dubbo学习之ReferenceBean Dubbo学习之ServiceBean 简介 本文基于S ...
- dubbo学习视频资料
dubbo学习视频资料 请叫我小橙,橙橙 偶遇青春 Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成. ...
- C#多线程学习(二) 如何操纵一个线程
C#多线程学习(二) 如何操纵一个线程 原文链接:http://kb.cnblogs.com/page/42529/ [1] C#多线程学习(二) 如何操纵一个线程 [2] C#多线程学习(二) 如何 ...
- spring security 学习二
spring security 学习二 doc:https://docs.spring.io/spring-security/site/docs/ 基于表单的认证(个性化认证流程): 一.自定义登录页 ...
- STL源码剖析学习二:空间配置器(allocator)
STL源码剖析学习二:空间配置器(allocator) 标准接口: vlaue_type pointer const_pointer reference const_reference size_ty ...
- mysql用创建的用户登陆并修改表格_MySQL 基础学习二:创建一个用户表,并增删改查...
MySQL 基础学习二:创建一个用户表,并 增删改查 提示:MySQL 命令建议都用大写,因为小写运行时,还是翻译成大写的. 第一步,创建一个用户表 1,打开控制台,进入数据库 C:\Users\Ad ...
- OpenCV学习(二十四 ):角点检测(Corner Detection):cornerHarris(),goodFeatureToTrack()
OpenCV学习(二十四 ):角点检测(Corner Detection):cornerHarris(),goodFeatureToTrack() 参考博客: Harris角点检测原理详解 Harri ...
- OpenCV学习(二十二) :反向投影:calcBackProject(),mixChannels()
OpenCV学习(二十二) :反向投影:calcHist(),minMaxLoc(),compareHist() 参考博客: 反向投影backproject的直观理解 opencv 反向投影 颜色直方 ...
- OpenCV学习(二十一) :计算图像连通分量:connectedComponents(),connectedComponentsWithStats()
OpenCV学习(二十一) :计算图像连通分量:connectedComponents(),connectedComponentsWithStats() 1.connectedComponents() ...
- OpenCV学习(二十) :分水岭算法:watershed()
OpenCV学习(二十) :分水岭算法:watershed() 参考博客: OpenCV-分水岭算法 图像处理--分水岭算法 OpenCV学习(7) 分水岭算法(1) Opencv分水岭算法--wat ...
最新文章
- java计算两个文本框的值,java 文本框自动获取另外两个文本框的值的乘积
- linux 磁盘科隆,上海第二工业大学嵌入式操作系统B复习(无答案版)
- java uuid静态方法_Java UUID version()方法与示例
- Java:使用 Java 开发的一个异常处理框架
- TypeScript极速完全进阶指南-2中级篇
- freeradius+mysql+pptpd+radiusmanager 游戏×××代理站完整实验过程
- 《别输在不会表达上》— 综合素质提升书籍
- Spring Boot 1.5.2.RELEASE中文版
- 基于java的房地产客户管理系统
- MATLAB关于xlsread函数的用法
- HTTP请求头headers
- 计算机英语听力,计算机英语词汇大全
- 教你如何将小视频转发到自己的朋友圈
- 京东平台和商家的不同合作模式
- 为什么我们说“买东西”,而不说“买南北”?
- 通信机制之异步通信和同步通信
- leetcode 273. 整数转换英文表示[困难]
- 提醒事项 android,每日提醒 Pro-提醒事项、时间管理待办清单
- Pandas的 loc iloc ix 区别
- 战略地位与行动评价矩阵(转载)