《别看了,你学不会的》——dubbo入门与实践(一)

dubbo概述

什么是Dubbo?

Dubbo是一款高性能、轻量级的开源远程过程调用(RPC)框架

什么是RPC?

Remote Procedure Call,是指远程过程调用,是一种进程间的通信方式
它是一种技术思想,而不是规范
它允许程序调用另一个地址空间(通常是共享网络 的另一台机器上)的过程或函数,而不是程序员显示编码这个远程调用的细节
开发者无论是调用本地的方法还是远程的方法,编写调用代码的方式基本相同

在这里插入图片描述

dubbo六大核心功能

一、面向接口代理的高性能RPC调用

提供高性能的基于代理的远程调用能力,服务以接口为粒度,为开发者屏蔽远程调用底层细节

二、智能负载均衡

内置多种负载均衡策略,智能感知下游节点健康状况,显著减少调用延迟,提高系统吞吐量
在这里插入图片描述

三、服务自动注册与发现

支持多种注册中心服务,服务实例上下线实时感知

四、高度可扩展能力

遵循微内核+插件的设计原则,所有核心能力如Protocol、Transport、Serialization被设计为扩展点,平等对待内置实现和第三方实现

五、运行期流量调度

内置条件、脚本等路由策略,通过配置不同的路由规则,轻松实现灰度发布,同机房 优先等功能
在这里插入图片描述

六、可视化的服务治理与运维

提供丰富服务治理、运维工具:随时查询服务元数据、服务健康状态及调用统计,实时下发路由策略、调整配置参数

Dubbo 架构和名词解释

在这里插入图片描述

SPI(Service Provider Interface)

SPI是一种服务发现机制。它通过在 ClassPath路径下的META-INF/services文件 夹查找文件,自动加载文件里所定义的类

IDL(Interface Description Language)

IDL是用来描述软件组件接口的一种计算机语言。IDL通过一种中立的方式来描述接口, 使得在不同平台上运行的对象和用不同语言 编写的程序可以相互通信交流;比如,一个组件用C++写成,另一个组件用Java写成

搭建admin客户端

搭建admin 客户端流程安装zookeeper
在这里插入图片描述
进入dubbo的github页面 (https://github.com/apache/dubbo)

下载Dubbo Admin (git clone https://github.com/apache/dubbo-admin.git)

访问Dubbo Admin,http://localhost:8080 用户名:root 密码:root

Dubbo的相关特性
属性配置优先级

属性重写优先级从高到低:

JVM -D 参数:当部署或者启动应用时,虚拟机参数轻易地重写配置,比如,改变dubbo协议端口
XML:XML中的当前配置会重写dubbo.properties中的配置
Properties:默认配置,仅仅作用于以上两者没有配置时

如果是一个简单的应用,不需要多注册中心或者多协议,需要在spring容器中共享配置,那么,我们可以直接使用 dubbo.properties作为默认配置

Dubbo 可以自动加载classpath根目录下的dubbo.properties文件,同样也可以使用JVM参数来指定路径

-Ddubbo.properties.file=xxx.properties

可以将xml的tag名和属性名组合起来,用 . 分隔每行一个属性

dubbo.application.name=foo相当于<dubbo:application name=“foo” />
dubbo.registry.address=10.20.153.10:9090 相当于<dubbo:registry address=“10.20.153.10:9090” />

启动时检查

Dubbo缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止Spring 初始化完成,以便上线时,能及早发现问题,默认check=“true”

可以通过check="false"关闭检查。比如:测试时,有些服务不关心,或者出现了循环依赖,必须有一方先启动

另外,如果Spring容器是懒加载,或者通过API编程延迟引用服务,需要关闭check,否则服务临时不可用时,会抛出异常,拿到null引用,

如果check=“false”,总是会返回引用,当服务恢复时,就能自动连上

配置方式
dubbo.reference.com.foo.BarService.check=false # 关闭某个服务的启动时检查 
dubbo.consumer.check=false # 关闭所有服务的启动时检查
dubbo.registry.check=false # 关闭注册中心启动时检查
请求超时

调用provider暴露的接口时,默认请求超时时间为1000毫秒

针对全局设置超时时间

<dubbo:consumer timeout="3000"/>

针对接口设置超时时间

 <dubbo:reference id="greetingsService" interface="com.yang.service.GreetingsService" timeout="3000"/>

针对方法设置超时时间

<dubbo:reference id="greetingsService" interface="com.yang.service.GreetingsService" > <dubbo:method name="timeoutMethod" timeout="3000"/> </dubbo:reference>
重试次数

当某个接口是幂等接口,并且当接口出现异常的时候,需要我们进行重试请求的话,那么我们可 以配置重试次数

这里配置的是重试次数为2次,并不包含正常的那一次请求
<dubbo:reference id="greetingsService" interface="com.yang.service.springdubbo.GreetingsService" >
        <dubbo:method name="timeoutMethod" timeout="1000" retries="2"/>
    </dubbo:reference>
多版本控制

Dubbo为同一个服务配置多个版本

当一个接口实现,出现不兼容升级时,可以用版本号过渡, 版本号不同的服务相互间不引用

可以按照以下的步骤进行版本迁移:

  1. 在低压力时间段,先升级一半提供者为新版本
  2. 再将所有消费者升级为新版本
  3. 然后将剩下的一半提供者升级为新版本
provier端配置多版本
<dubbo:service interface="com.muse.service.springdubbo.MuliVersionService" ref="muliVersionService" version="0.0.1"/>
<dubbo:service interface="com.muse.service.springdubbo.MuliVersionService" ref="muliVersionServiceV2" version="0.0.2"/>
consumer端配置使用某个版本
<dubbo:reference id="muliVersionService" interface="com.yang.service.springdubbo.MuliVersionService" version="0.0.1"/>
本地存根
在Dubbo中利用本地存根在客户端执行部分逻辑

远程服务后,客户端通常只剩下接口,而实现全在服务器端,但提供方有些时候想在客户端也执行部分逻辑,比如:做ThreadLocal缓存,提前验证参数,调用失败后伪造容错数据等等

此时就需要在API中带上Stub,客户端生成Proxy实例,会把Proxy通过构造函数传给Stub(Stub必须有可传入Proxy的构造函数),然后把Stub暴露给用户,Stub可以决定要不要去调Proxy
在这里插入图片描述

dubbo的高可用

注册中心宕机

注册中心宕机后,Consumer依然可以通过本地缓存的服务列表进行查询和通信,但是 此时不能再注册新的服务

注册中心如果是集群,那么如果任意一台宕机了,将自动切换到另外一台

由于Provider是无状态的,所以任意一台Provider宕机,都不影响使用。除非所有的 Provider都宕机了,那么Consumer则无法调用Provider远程方法,会执行无限次重连 操作,等待Provider恢复

当关闭zookeeper之后,Provider和Consumer后台都开始报连接zookeeper被拒绝

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值