dubbo是一款高性能 轻量级的开源服务框架(RPC框架)

  1. 数据格式
  2. 传输方式
    • dubbo协议 数据格式,netty传输
    • http协议 数据格式,Tomcat,jetty

Springcloud
Dubbo

  • 提供者提供一个实现方法接口的类
  • 消费者从spring中拿到服务对象,只依赖一个接口

应用

@Service(loadbalance)定义了一个dubbo的服务

scan.base-packages扫描路径
registry.address

protocol(s可以配置多个协议).name
protocol.port dubbo协议使用netty的端口

消费者@Reference(loadbalance=”consisthash”)注解 加入代理对象

负载均衡1

  • 随机
  • 轮询
  • 一致性哈希 相同参数的请求总是发到同一提供者
  • 最小活跃数 消费者自己统计自己的
    • 消费者的本地缓存服务提供者 有属性active 记0

服务超时

服务端的超时:执行时间超过指定会抛warn 默认值1s
服务端一定会把程序执行完
消费端的超时:
服务执行5
消费3
提供6

集群容错2

报错后 会重试其他服务2次
Failfast 快速失败,只调用一次 失败立即报错
Failsafe:出现异常忽略
Failback:失败后记录 定时重发
Forking:并行同时调用
Broadcast:都成功才成功

服务降级 本地伪装3

单个服务提供者的自身容错 mock

本地存根

在消费端执行 由提供者提供,在消费者调用之前或之后再做一些事情,如结果缓存,请求参数验证
stub = “true” 类名Service+Stub

参数回调

回调逻辑

异步调用

CompletableFuture.supplyAsync
future.whenComplete

泛化调用

不依赖提供方的接口 genericService接口

泛化服务

实现genericService接口

dubbo中的REST

将dubbo协议 支持REST协议 这样消费者就可以通过REST形式调用我们的服务了

管理台

动态配置

动态配置修改的是服务参数,并不能修改服务的协议、IP、port、version、group,因为这5个信息是服务的标识信息,是服务的身份证号 不能修改

服务路由

条件路由

  • application=app1 => address=*:20880

黑名单 某个消费者不能调用XX服务

读写分离 标签路由