dubbo是一款高性能 轻量级的开源服务框架(RPC框架)
- 数据格式
- 传输方式
- 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服务
读写分离 标签路由