dubbo高级特性分析

这篇具有很好参考价值的文章主要介绍了dubbo高级特性分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.dubbo多协议支持

某些场景下,可能接口是使用的老的协议去发布的,此时希望接口能够以一种新的协议去发布,老的服务按照老的协议去调用,新的服务按照新的协议去调用 而dubbo服务就可以支持发布多种协议,如 dubbo / hessian / thrift / grps http2.0/ protobuff, rest 等,如果要切换某种协议,只需要添加该协议对应的依赖包即可
以rest协议为例,它是基于JAX-RS 来实现的,dubbo发布rest服务是基于 RESTEasy的,同时需要容器的支持, 先修改 配置文件,指定服务发布的协议:dubbo高级特性分析
然后在服务实现类上面指定发布的协议:
dubbo高级特性分析
@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风格的服务:
dubbo高级特性分析
启动注册中心(这里用zookeeper)和provider服务,这样就可以通过浏览器去访问这个rest协议的接口了:http://localhost:8888/say
服务的消费方也可以指定使用dubbo协议来进行消费:
dubbo高级特性分析
启动消费方服务进行调用:
dubbo高级特性分析
provider端消息打印:
dubbo高级特性分析

2.Dubbo负载均衡

dubbo高级特性分析
从dubbo架构图中可以看到,provider如果有多个的话,consumer调用provider时必然会涉及到负载均衡,dubbo已经默认配置了负载均衡策略,即使不配置,也会有默认的的负载均衡,从dubbo源码中可以看到dubbo可以支持如下5种负载均衡算法:
dubbo高级特性分析

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

dubbo高级特性分析
dubbo高级特性分析
dubbo高级特性分析

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

配置负载均衡算法:
dubbo高级特性分析
如果负载均衡算法配置的是一致性hash算法,针对请求参数相同的请求,会落到同一台服务器上。

负载均衡算法名字如果不知道的话,可以去具体的负载均衡算法类里面找:
dubbo高级特性分析

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服务中),服务的消费端
dubbo高级特性分析
消费方泛化调用:
dubbo高级特性分析
启动nacos注册中心,访问 demo接口:
dubbo高级特性分析
代码:https://gitee.com/liuch890228/dubbo-learn/tree/dubbo-protocol-rest

5.服务降级

dubbo的服务降级很容易实现,只需要在DubboReference注解中加一个mock属性,值为新增的服务降级处理类的全路径名
dubbo高级特性分析
dubbo高级特性分析
启动nacos注册中心和provider,consumer测试:
dubbo高级特性分析
演示代码:https://gitee.com/liuch890228/dubbo-learn/tree/dubbo-fallback文章来源地址https://www.toymoban.com/news/detail-438259.html

6.Dubbo常用配置

  • 启动检查
    解决服务之间相互依赖时,被依赖的服务未启动导致当前服务无法启动的问题
    (1)对消费端服务
    dubbo高级特性分析
    如上,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: dubbo高级特性分析
    (5)轮询本机网卡,找到合适的IP
    上面获取到的ip是bindIP, 如果需要作为服务注册中心的ip,还会读取环境变量 DUBBO_IP_TO_REGISTRY的值,如果这个值没配置,才会将绑定ip作为注册中心的ip
    dubbo高级特性分析
  • 配置优先级
    方法级别的配置> 接口级别的配置
    客户端没配置,服务提供端为准
    客户端和服务端都配置,以客户端为准
    dubbo高级特性分析
    dubbo高级特性分析
    配置加载优先级:环境变量 外部配置(application.properties) API 本地文件(dubbo.properties)

到了这里,关于dubbo高级特性分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • RabbitMQ3.13.0起支持MQTT5.0协议及MQTT5.0特性功能列表

    RabbitMQ 3.12 中发布的原生 MQTT 为物联网用例提供了显著的可扩展性和性能改进。 RabbitMQ 3.13 将支持 MQTT 5.0,因此将成为我们使 RabbitMQ 成为领先的 MQTT 代理之一的下一个重要步骤。 这篇博文解释了如何在 RabbitMQ 中使用新的 MQTT 5.0 功能。 MQTT 是物联网 (IoT) 的标准协议。 物联

    2024年04月13日
    浏览(30)
  • 干翻Dubbo系列第十二篇:Dubbo协议介绍

    文章目录 文章说明 一:Dubbo协议 1:Dubbo协议简介 2:Dubbo协议优点  3:Dubbo协议帧的组成 (一):幻数 (二):2Way (三):event (四):Serilization ID (五):status (六):RequestID (七):数据长度         Rpc过程当中三个核心的要素就是: 协议、序列化 、通信方式         Dubbo协议

    2024年02月12日
    浏览(25)
  • 自定义Dubbo RPC通信协议

    Dubbo 协议层的核心SPI接口是 org.apache.dubbo.rpc.Protocol ,通过扩展该接口和围绕的相关接口,就可以让 Dubbo 使用我们自定义的协议来通信。默认的协议是 dubbo,本文提供一个 Grpc 协议的实现。 Google 提供了 Java 的 Grpc 实现,所以我们站在巨人的肩膀上即可,就不用重复造轮子了。

    2024年01月19日
    浏览(42)
  • SpringBoot集成Dubbo启用gRPC协议

    本文记录下SpringBoot集成Dubbo启用gRPC协议,以及与原生 gRPC 在代码编写过程中的区别。 下面还有投票,帮忙投个票👍 2023.6.30 补充:Dubbo 官方文档开放,为开发者使用提供友好的支持。 Dubbo 在 2.7.5 版本开始支持原生 gRPC 协议,对于计划使用 HTTP/2 通信或者期望 gRPC 协议支持服

    2023年04月12日
    浏览(32)
  • Dubbo 的心脏:理解和应用多种协议【十三】

    欢迎来到我的博客,代码的世界里,每一行都是一个故事 在分布式系统的世界里,协议就像是不同服务之间的共同语言。它决定了服务如何交流,影响着系统的性能和可靠性。Dubbo 作为一个优秀的微服务框架,提供了多种协议选项,让开发者能够根据自己的需要灵活选择。在

    2024年01月21日
    浏览(25)
  • 高级篇-rabbitmq的高级特性

         启动MQ 创建Queues:  两种Callback: 1.ReturnCallback:全局callback   2.ComfirmCallback: 发送信息时候设置    执行成功:  监控页面: 模拟失败:  1.投递到交互机失败 2.投递到交换机了,但是没有进入队列     注意:   演示数据是否默认持久化:       重启mq:  1. 交互机、

    2024年02月09日
    浏览(28)
  • 【Dubbo】Dubbo架构的演进过程分析

    📫作者简介: 小明java问道之路 , 2022年度博客之星全国TOP3 ,专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化,文章内容兼具广度、深度、大厂技术方案,对待技术喜欢推理加验证,就职于知名金融公司后端高级工程师。          📫 热衷分享,喜欢原

    2024年02月07日
    浏览(25)
  • IntelliJ IDEA 2023.1正式发布,Maven项目大提速&支持Apache Dubbo

    你好,我是 YourBatman :做爱做之事❣交配交之人。 一年一个大版本,共计3个中型版本 ,北京时间2023年3月月29日终于迎来了IntelliJ IDEA今年的首个版本2023.1。老规矩,吃肉之前,可以先把这几碗汤干了,更有助于消化(每篇都很顶哦): IntelliJ IDEA 2023.1正式发布,Maven项目大提

    2023年04月20日
    浏览(50)
  • Spark高级特性 (难)

    闭包 通过 closure 返回的函数 f 就是一个闭包, 其函数内部的作用域并不是 test 函数的作用域, 这种连带作用域一起打包的方式, 我们称之为闭包, 在 Scala 中 Scala 中的闭包本质上就是一个对象, 是 FunctionX 的实例 Spark中的闭包 分发闭包 上述这段代码中,flatMp中传入的是另外一个

    2024年01月19日
    浏览(20)
  • RabbitMQ消息队列高级特性

    在线上生产环境中,RabbitMQ可能会产生消息丢失或者是投递失败的一个场景,RabbitMQ为了避免这种场景的发生,提供了两种方式来控制消息传递的可靠性。 Confirm确认模式 消息从生产者到MQ的Exchange过程中,如果消息成功到达,则会返回一个ConfirmCallback的确认函数。 Return退回模

    2024年02月12日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包