标签说明
- <dubbo:application name=“practice-server” /> 配置服务名称
- <dubbo:registry address=“N/A” /> 服务中心注册
- <dubbo:protocol name=“dubbo” port=“20880” /> 暴露服务协议以及端口
- <dubbo:service interface=“xxx” ref=“loginService” /> 暴露接口
- <dubbo:reference id="loginService"interface="xxx"url=“dubbo://192.168.13.1: 2 0 com.gupaoedu.practice.LoginService”/> 消费端(客户端)引用提供者的接口
- <dubbo:registry address=“zookeeper://192.168.13.102:2181” /> zk做服务中心的注册
dubbo 服务的多注册中心注册
<dubbo:registry address="zookeeper://192.168.13.102:2181"
id="registryCenter1"/>
<dubbo:service interface="xxx" ref="loginService" registry = "registryCenter1"/>
<dubbo:registry address="zookeeper://192.168.13.102:2181"
id="registryCenter2"/>
dubbo 特性
- 支持多注册中心:redis nacos
- 支持多种协议:dubbo webservice rest
客户端 reference
服务端 service
- 服务暴露时,可以指定注册中心(registry),可以指定连接协议(protocol)
- 服务暴露时,针对某一单一接口,可以使用多种协议暴露服务 protocol = dubbo ,webservice
注解方式的使用
- dubbo.protocal.name
- dubbo.protocal.port
- dubbo.registry.address
- dubbo.application.name
- dubbo.scan.base-packages
- @DubboService 暴露服务
- @DubboReference
负载均衡
@Reference(loadbalance = “random”)
- RandomLoadBalance 权重随机算法,根据权重值进行随机负载
- LeastActiveLoadBalance 最少活跃调用数算法
- ConsistentHashLoadBalance hash 一致性算法
- RoundRobinLoadBalance 加权轮询算法
集群容错
cluster = “failsafe”
- Failover(缺省)
失败自动切换,当出现失败,重试其它服务器。(缺省)
通常用于读操作,但重试会带来更长延迟。
可通过 retries="2" 来设置重试次数(不含第一次)。
- Failfast
快速失败,只发起一次调用,失败立即报错。
通常用于非幂等性的写操作,比如新增记录。
- Failsafe
失败安全,出现异常时,直接忽略。
通常用于写入审计日志等操作。
- Failback
失败自动恢复,后台记录失败请求,定时重发。
通常用于消息通知操作。
- Forking
并行调用多个服务器,只要一个成功即返回。
通常用于实时性要求较高的读操作,但需要浪费更多服务资源。
可通过 forks="2" 来设置最大并行数。
- Broadcast Cluster
广播调用所有提供者,逐个调用,任意一台报错则报错。
remark:在实际应用中 查询语句容错策略建议使用默认 Failover Cluster ,而增删改 建议使用
Failfast Cluster 或者 使用 Failover Cluster(retries=”0”) 策略 防止出现数据 重复
添加等等其它问题!建议在设计接口时候把查询接口方法单独做一个接口提供查询。
服务降级
实现:定义一个降级类处理降级相应操作
代码实现:客户端接口实现配置
mock = 降级处理类
timeout = 防止超时
cluster = 快速失败,只发起一次调用,失败立即报错
@Reference(
loadbalance = "random",
mock =
"com.springboot.practice.springbootdubboclient.MockSayHelloService",
timeout =1000,
cluster = "failfast")
启动时检查
Dubbo 缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止 Spring
初始化完成,以便上线时,能及早发现问题,默认 check="true"。
可以通过 check="false" 关闭检查,比如,测试时,有些服务不关心,或者出现了循环
依赖,必须有一方先启动。
Dubbo 架构设计及分层
角色
- 注册中心registry:服务的注册与发现
- 服务提供者provider:暴露服务
- 服务消费者consume:调用远程服务
- 监控中心:服务之间的调用次数,调用时间
- 容器container:服务容器
调用流程
- container容器负责启动,加载,运行provider
- provider向注册中心注册自己的服务
- consume向注册中心订阅自己的服务
- registry向consume提供服务提供者列表,如果provider有变更,则registry通过长连接将变更数据推送到consume
- consume调用provider,基于负载均衡进行调用
- consume调用provider的统计,基于短链接规定每分钟统计一次到monitor
分层
- 接口服务层(service):面向开发者,接口,实现等
- 配置层(config):对外配置接口,以serviceConfig和ReferenceConfig为中心
- 服务代理层(proxy):对于生产者和消费者,Dubbo会产生一个代理类封装调用细节
- 服务注册层(registry):封装服务地址的注册与发现,以服务URL为中心
- 路由层(cluster):封装多个提供者的路由和负载均衡
- 监控层(Monitor)
- 远程调用层(Protocal)
- 信息交换层(Exchange)
- 网络传输层(Transport)
- 数据序列化层