dubbo高级特性分析

news2024/12/23 7:06:16

1.dubbo多协议支持

某些场景下,可能接口是使用的老的协议去发布的,此时希望接口能够以一种新的协议去发布,老的服务按照老的协议去调用,新的服务按照新的协议去调用 而dubbo服务就可以支持发布多种协议,如 dubbo / hessian / thrift / grps http2.0/ protobuff, rest 等,如果要切换某种协议,只需要添加该协议对应的依赖包即可
以rest协议为例,它是基于JAX-RS 来实现的,dubbo发布rest服务是基于 RESTEasy的,同时需要容器的支持, 先修改 配置文件,指定服务发布的协议:在这里插入图片描述
然后在服务实现类上面指定发布的协议:
在这里插入图片描述
@DubboService(registry = {“shanghai”, “nanjing”}, protocol = {“dubbo”,“rest”}) 注解中配置protocol = {“dubbo”,“rest”} , 那么SayHelloServiceImpl 这个类会发布基于dubbo协议和rest协议的服务,既可以通过dubbo协议来访问服务,也可以通过rest协议来访问服务,但是rest协议还需要额外加个配置:
(1) pom依赖

 <!-- 基于resteasy -->
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-jaxrs</artifactId>
            <version>3.13.0.Final</version>
        </dependency>

        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-client</artifactId>
            <version>3.13.0.Final</version>
        </dependency>

        <!-- jetty依赖,须注意与dubbo版本兼容问题-->
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-server</artifactId>
            <version>9.4.19.v20190610</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-servlet</artifactId>
            <version>9.4.19.v20190610</version>
        </dependency>

添加jetty容器,注意与dubbo版本的兼容关系
通过HTTP协议发布rest风格的服务:
在这里插入图片描述
启动注册中心(这里用zookeeper)和provider服务,这样就可以通过浏览器去访问这个rest协议的接口了:http://localhost:8888/say
服务的消费方也可以指定使用dubbo协议来进行消费:
在这里插入图片描述
启动消费方服务进行调用:
在这里插入图片描述
provider端消息打印:
在这里插入图片描述

2.Dubbo负载均衡

在这里插入图片描述
从dubbo架构图中可以看到,provider如果有多个的话,consumer调用provider时必然会涉及到负载均衡,dubbo已经默认配置了负载均衡策略,即使不配置,也会有默认的的负载均衡,从dubbo源码中可以看到dubbo可以支持如下5种负载均衡算法:
在这里插入图片描述

加权随机负载均衡(默认的负载均衡算法);
加权轮询负载均衡—— 根据权重大小生成区间,然后生成一个随机数,根据随机数所落的区间来决定哪个服务器来处理请求

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

一致性hash算法—— 解决数据分片场景下,增加/减少节点后hash计算带来的数据迁移的问题(本质是数据读取不到,假设存入时hash%服务器数量后数据存到了第一台服务器,这时扩容了,要去查询这个数据,再次用相同参数对服务器数量进行hash取模运算,得到的服务器可能就不是当初存储数据的那台服务器了) ,dubbo的一致性hash算法默认根据第一个参数进行取模
一致性hash算法详细介绍: https://www.cnblogs.com/myseries/p/10956835.html
在这里插入图片描述

配置负载均衡算法:
在这里插入图片描述
如果负载均衡算法配置的是一致性hash算法,针对请求参数相同的请求,会落到同一台服务器上。

负载均衡算法名字如果不知道的话,可以去具体的负载均衡算法类里面找:
在这里插入图片描述

3.集群容错

容忍错误的能力(出现错误之后怎么去处理)
分布式集群下,客户端请求会存在三态问题:成功/失败/未知

  • failover cluster(默认)
    失败自动重试(重试其他服务器)—— 失败自动切换
    @DubboService(cluster = “failover”, retries = 2, registry = {“shanghai”, “nanjing”}, version = “2.0”)
    这种场景下,如果时事务型操作,需要保证幂等,多次重试的结果相同 并且最终成功
  • failfast cluster
    快速失败 ,如果插入数据失败,立即报错,适用于不需要幂等的场景
  • failsafe cluster
    失败安全,出现异常时直接将异常吞掉。
  • failback cluster
    失败自动恢复 :记录失败请求,定时重发,保证最终一致
  • forking cluster
    并行调用多个服务节点,只要其中一个节点成功返回,就直接用这个节点的结果进行返回
  • broadcast cluster
    广播调用,一个请求调用所有的服务提供者,只要其中一个节点报错,则认为这个请求失败;
    比如更新服务器上的缓存等操作

4.Dubbo泛化

dubbo泛化解决的问题:针对跨语言调用dubbo服务的场景下,服务的消费端没有公共契约(api服务)时,如何去调用dubbo服务;
这种场景下,接口定义直接写在服务提供端(而不是api服务中),服务的消费端
在这里插入图片描述
消费方泛化调用:
在这里插入图片描述
启动nacos注册中心,访问 demo接口:
在这里插入图片描述
代码:https://gitee.com/liuch890228/dubbo-learn/tree/dubbo-protocol-rest

5.服务降级

dubbo的服务降级很容易实现,只需要在DubboReference注解中加一个mock属性,值为新增的服务降级处理类的全路径名
在这里插入图片描述
在这里插入图片描述
启动nacos注册中心和provider,consumer测试:
在这里插入图片描述
演示代码:https://gitee.com/liuch890228/dubbo-learn/tree/dubbo-fallback

6.Dubbo常用配置

  • 启动检查
    解决服务之间相互依赖时,被依赖的服务未启动导致当前服务无法启动的问题
    (1)对消费端服务
    在这里插入图片描述
    如上,DubboReference注解配置check=true则表示开启启动检查,此时provider未启动,则会启动失败,如果改为false则能够正常启动(consumer中所有使用 @DubboReference注解的地方 都需要加)
    (2)针对注册中心不可用的场景,配置dubbo.registry.check=false 则是 关闭注册中心启动时检查。
    更多启动检查配置,参考: dubbo启动检查
  • 主机绑定
    源码:org.apache.dubbo.config.ServiceConfig#findConfigedHosts
    (1)查找环境变量中是否存在启动参数 DUBBO_IP_TO_BIND,(-d DUBBO_IP_TO_BIND=xx )如果存在则取这个值作为服务注册的ip
    (2)读取配置文件dubbo.protocols.dubbo.host 作为服务注册的ip
    (3)hostToBind = InetAddress.getLocalHost().getHostAddress(); 获取本机IP地址作为服务注册的ip
    (4)如果(3)中 获取的ip不合法,则通过socket去连接注册中心获取本机IP: 在这里插入图片描述
    (5)轮询本机网卡,找到合适的IP
    上面获取到的ip是bindIP, 如果需要作为服务注册中心的ip,还会读取环境变量 DUBBO_IP_TO_REGISTRY的值,如果这个值没配置,才会将绑定ip作为注册中心的ip
    在这里插入图片描述
  • 配置优先级
    方法级别的配置> 接口级别的配置
    客户端没配置,服务提供端为准
    客户端和服务端都配置,以客户端为准
    在这里插入图片描述
    在这里插入图片描述
    配置加载优先级:环境变量 外部配置(application.properties) API 本地文件(dubbo.properties)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/509191.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

c++入门第一篇

C 1 C是编译语言1.1 windows平台运行c1.2 linux平台运行c1.3 Clion和MinGW-w64&#xff08;编译器&#xff09;安装教程1.4 clion的使用教程1.5 c开发工具1.6 c发展应用领域1.7 c学习路线1.8 c学习资料1.9 编程界的四大派系 2 基本语法2.1 c程序各部分介绍2.2 编写C程序2.3 c第…

zeppos 开发工具模拟器 simulator 无法显示app

zeppos 开发工具模拟器 simulator 无法显示app 目录问题描述&#xff1a;simulator的 Apps 不显示 hello-world 工程解决方案 目录 问题描述&#xff1a;simulator的 Apps 不显示 hello-world 工程 已确认部分&#xff1a; 1.网卡驱动安装成功 2.simulator version:1.1.9 3.d…

【LinuxShell】Shell编程之数组

文章目录 一、数组二、数组的定义方式三、数组的相关概述1.数组包括的数据类型2.获取数组长度3.获取数组数据列表4.获取数据下标列表5.获取某下标赋值6.如何判断数组是否缺少元素 四、数组的操作1.数组遍历2.数组切片3.数组替换4.数组删除5.数组追加元素 五、函数与数组的使用1…

致力于中小企业JavaEE企业级快速开发平台、后台框架平台

一、开源项目简介 J2eeFAST 是一个 Java EE 企业级快速开发平台&#xff0c; 致力于打造中小企业最好用的开源免费的后台框架平台 。系统基于&#xff08;Spring Boot、Spring MVC、Apache Shiro、MyBatis-Plus、Freemarker、Bootstrap、AdminLTE&#xff09;经典技术开发&…

zigbee抓包器使用

软件名称&#xff1a;Ubiqua Protocol Analyzer 主要操作流程&#xff1a; 1. 添加物理抓包器 2. 抓包 3. 过滤

注入攻击(一)--------SQL注入(结合BUUCTF sqli-labs)

目录 写在前面一、暴力破解Basic-3-Brute 11.解题思路2.Burp Suite工具使用简介 二、基于GET的SQL注入Pre.使用校园网做题时可能遇到的小问题 2.1 Basic-4-SQL course 1&#xff08;sql注入&#xff09;1.解题思路 2.2 Basic-8-sqli-labs&#xff08;sql注入的各种攻击形式&…

iostat

目录 iostat 查看读写速度和占用CPU时间比率 一、包名 二、常用命令 三、模拟磁盘读写 iptop 看哪个进程使用存储多 iostat 查看读写速度和占用CPU时间比率 一、包名 sysstat &#xff08;和sar同一个包&#xff09; 二、常用命令 iostat 1 每一秒…

js执行思维导图

备注&#xff1a; js执行&#xff1a; 执行分为两部分&#xff1a;预执行和执行 预执行&#xff1a;创建好执行上下文 执行&#xff1a;执行栈中执行 js引擎&#xff1a; 读取并执行js 各个浏览器的引擎如下 …

总结846

学习目标&#xff1a; 月目标&#xff1a;5月&#xff08;张宇强化前10讲&#xff0c;背诵15篇短文&#xff0c;熟词僻义300词基础词&#xff09; 周目标&#xff1a;张宇强化前3讲并完成相应的习题并记录&#xff0c;英语背3篇文章并回诵 每日必复习&#xff08;5分钟&#…

软考A计划-重点考点-专题八(知识产权和标准化知识)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

环保认证油烟监测装置餐饮业油烟污染如何治理?

摘要&#xff1a;城市餐饮业油烟污染成了困扰城区环境保护部门和人民群众日常生活的主要问题。油烟污染已经成为我国一个重大的污染源&#xff0c;是形成PM2.5的重要污染源之一&#xff0c;为了解决餐饮业油烟管理方面存在的问题&#xff0c;设计了餐饮业油烟在线监控系统&…

什么CRM客户管理系统最好?

产业互联网背景下&#xff0c;企业数字化转型日渐深化。毋庸置疑&#xff0c;客户是企业的命脉&#xff0c;企业发展的关键便是以客户为中心&#xff0c;为客户创造价值&#xff0c;并不断实现企业的可持续性增长&#xff0c;而这也是每个企业永不落幕的主题。 一套优秀的CRM客…

设计模式之【装饰者模式】,实现“穿衣打扮”自由原来这么简单

文章目录 一、什么是装饰者模式1、装饰者模式原理2、装饰者模式四大角色3、代理、桥接、装饰器、适配器 4 种设计模式的区别4、装饰者模式的应用场景5、装饰者模式和代理模式的对比6、装饰者模式优缺点7、抽象装饰器&#xff08;Decorator&#xff09;是必需的吗 二、实例1-煎饼…

上门推拿app开发软件|上门推拿o2o源码|上门推拿小程序

随着社会的发展&#xff0c;人们越来越注重身体健康&#xff0c;推拿按摩已经成为了不少人减轻身体疲劳、缓解压力的重要方式。但是&#xff0c;传统的推拿按摩前往店铺消费时间成本高、实现复杂&#xff0c;为此同城预约上门推拿小程序成为了时代的产物。   1. 市场需求大&a…

【机器学习】线性回归模型详解

PS&#xff1a;本文有一定阅读门槛&#xff0c;如果有不明白的地方欢迎评论询问&#xff01; 1 模型概述 接下来我们将要学习我们的第一个模型——线性回归。比如说我需要根据数据预测某个面积的房子可以卖多少钱 接下来我们会用到以下符号&#xff1a; m:训练样本数量x:输…

软考A计划-重点考点-专题七(软件工程)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

当今自然语言处理领域中的成功之路:Transformer模型

当今自然语言处理领域中最重要和最成功的模型之一是Transformer模型。它是一种基于自注意力机制的神经网络模型&#xff0c;最初由Google公司的研究人员提出&#xff0c;并被广泛应用于机器翻译、文本生成、情感分析等任务中。 Transformer模型之所以被广泛使用&#xff0c;是因…

AI 将完全取代前端开发吗?

注&#xff1a;今晨&#xff0c;我浏览 Medium&#xff0c;看到了篇颇为标题党的文章&#xff0c;于是我就将它抛给了 ChatGPT。本篇文章全部由 ChatGPT 所写。同时&#xff0c;我也请 ChatGPT 分享了它对此的观点。 最近&#xff0c;我的同事向我讲述了他与他老板的一次谈话。…

Golang每日一练(leetDay0061) 表列序号、阶乘后的零

目录 171. Excel 表列序号 Excel Sheet Column Number &#x1f31f; 172. 阶乘后的零 Factorial Trailing Zeroes &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练…

ImageBind 多模态文本、图像、音频 Embedding同一个共享空间

参考&#xff1a; https://github.com/facebookresearch/ImageBind ImageBind learns a joint embedding across six different modalities - images, text, audio, depth, thermal, and IMU data ImageBind 多个模态共享同一个空间Embedding&#xff0c;这样可以通过一个模态…