Dubbo专栏的内容我会先介绍一下特性。然后根据每个特性,从源代码角度做专栏分析。每个章节都会不断的更新,感兴趣的同学可以持续关注一下。内容会讲的很细,耐心跟一下,你一定有所收获。
- Protocal:默认dubbo协议,默认端口20880
- zk作为注册中心,创建接口下的consumer/provider/configurator/router节点是持久话节点。此四个节点下的节点是临时节点,会话心跳检测不到节点信息,就会自动删
- @enabledubbo:扫描@service和@reference注解
- dubbo重试次数可以通过xml或者注解配置。也可以通过上下文动态配置,RpcContext.setAttachment("retries",2)
- 集群容错:cluser
- Failover Cluster
- Failfast Cluster
- Failsafe Cluster
- Failback Cluster
- Forking Cluster
- Broadcast Cluster:广播调用,任意一个报错,就报错
- 负载均衡:localbalance
- Random LoadBalance
- RoundRobin LoadBalance
- LeastActive LoadBalance
- ConsistentHash LoadBalance:相同参数的请求总是发到同一提供者
- 线程模型:protcol:dispatcher,ThreadPool
- 直连服务:<dubbo:reference url=“dubbo://localhost:20890” />
- 指定订阅
- 多协议
- 多注册中心
- SpringCloud基于http,dubbo基于TCP并发度更高。
- SpringCloud只有HTTP协议,dubbo支持多个通信协议
- 多分组:Dubbo group多分组时,消费者指定group="*",则可以使用任意分组
- 多聚合:Dubbo group 提供merge功能,合并方法对应所有分组输出的结果(利用Dubbo SPI实现)。
- 静态服务:dynamic=false.服务上下线,人工管理。
- 多版本:version
- .Dubbo参数校验.
- 包:javax.validation/validate-hibernate.
- @reference中设置validation=true(注意是在消费侧添加,消费测校验)
- 结果缓存:cache=。lru,threadlcoal,jcache
- 泛化调用:GenerateService,调用所有服务的实现。主要用于客户端没有Api、入参和出参数模型时。可以用来待见通用测试框架。
- 上下文信息:RpcContext.getContext()
- .隐士参数:Attachment 在服务消费方和提供方之间隐式传递参数。RpcContext.getContext().getAttachment("index");
- 异步执行:阻塞主线程,等待返回结果。consume将provider端执行的业务从Dubbo内部线程池,切换到业务线程。 (优化:completeFuture,采用同志的方式,不会阻塞主线程)。
- 本地调用:inJvm=true,使用本机服务,不需要远程调用。2.2.0版本之后,默认优先引用本地服务,如果想引用远程服务,配置scope=remote.
- 参数回调:通过参数回调,从服务端调用客户端逻辑。Dubbo基于长连接生成反向代理,这就可以从服务端调用客户端逻辑(利用TCP双向通信)dubbo非常适合这种长链接的双端通信
- 事件通知:
- 本地存根:stub消费端本地生成代理(消费端也实现接口),由本地代理决定是否嗲用远程服务。在本地执行部分业务逻辑+服务方业务逻辑
- 实现远程接口
- .持有被代理服务引用,走构造函数传值(服务暴露的时候会对stub配置进行校验)
- 本地伪装:通常用于实现服务降级。支持:force和fail(默认)。force不走远程调用,直接强制降级。fail当远程调用失败,才走降级。
- mock=ture,默认降级类:接口名+mock。也可以mock="全限类名"。这两个都会走远程服务,当RPC异常才会降级
- mock="force:true",直接走降级
- mock="force: return abbc" 直接降级
- mock="throw java.lang.runtimeException" 直接降级
- force强制降级,一般不会在代码中直接配置,而是通过服务治理的方式,dubbo-admin over-wirte直接配置的。
- stub和mock区别。
- mock只关注异常,且只关注RPCException
- stub在consumer编写部分逻辑,可在RPC调用前后编写业务逻辑,异常时降级。
- dubbo-admin:dubbo服务治理,overide运行时动态改变dubbo服务配置信息。
- .延迟暴露:delay。当服务需要预热,比如缓存数据,等待资源时。目前已经无用了,服务都是在Spring容器启动之后才暴露的。
- .并发控制:实现线程隔离,会新创建线程池(和dubb线程池隔离)
- executes:服务端并行执行数。
- actives:每个客户端并发执行数。
- .连接控制:protocol:accepts,connections
- accepts=10:限制服务器端接受的连接不能超过 10 个
- connections=10:限制客户端服务使用连接不能超过 10 个
- connections:表示该服务对每个提供者建立的长连接数
- .粘滞连接:尽可能让客户端总是向同一提供者发起调用
- .令牌验证:在注册中心控制权限,可以防止消费者绕过注册中心访问提供者。
- .配置规则/配置覆盖
- Api形式修改:Registry.register()
- dubbo-admin:overide协议目的是在运行时修改属性的
- .优雅停机:优雅停机超时时间默认10s。配合Severlet规范,销毁监听器,调用Spring事件监听器,调用DubboShutdownHook.destoryAll()方法。
- 服务方:不再接受新的请求,等待线程池中正在执行的线程执行结束。
- 消费方:不再发起新的请求,等待未返回的响应完成响应。
- 主机绑定:protcol:host,port. 默认获取IP可能是内网IP