随笔分类 - Dubbo源码解析
摘要:负载均衡 Dubbo支持的负载均衡有如下策略:默认是随机 权重随机(random),实现类RandomLoadBalance 权重轮询(roundrobin),实现类RoundRobinLoadBalance 最少活跃(leastactive)负载策略,实现类LeastActiveLoadBalan
阅读全文
摘要:在对服务者调用流程的讲解中,最后invoker调用链是 RegisterDirectory$InvokerDelegate.invoke(InvokerWrapper.invoke) -> ListenerInvokerWraper.invoke -> ProtocolFilterWrapper.i
阅读全文
摘要:概述 关于dubbo的路由配置,可以查看官网,那么路由到底做了什么呢?起始就是根据一次服务请求,消费者根据路由配置决定调用哪些服务提供者,然后将对应的服务提供者进行负载均衡,集群容错。 路由规则调用流程 调用入口:AbstractClusterInvoker#invoke => List<Invok
阅读全文
摘要:override协议可以让用户动态修改配置,并实时生效。关于动态配置的介绍可以详细看官网https://dubbo.apache.org/zh/docs/v2.7/user/examples/config-rule-deprecated/#m-zhdocsv27userexamplesconfig-
阅读全文
摘要:在上一篇中提到了RegisteryProtocol#doRefer里面的invoker 为 MockClusterInvoker。 我们在ExtensionLoader一节中,漏讲了一个细节,那就是获取自适应扩展类的时候,采用字节码生成技术的时候,生成的$Adaptive类中获取扩展类是通过Exte
阅读全文
摘要:在上一节中,由于篇幅原因,对invoker的介绍会在本章节详细阐述。 生成消费者调用invoker 将代码点到ReferenceConfig#createProxy -> invoker = refprotocol.refer(interfaceClass, url); 这边还不得不提一下refpr
阅读全文
摘要:在看完上篇的服务提供者启动流程之后,再来看消费者的启动流程就简单很多了,其大体的设计流程是差不多的。服务消费者的启动主要调用ReferenceConfig#get(), get方法跟服务提供者的export方法类似,主要关注checkAndUpdateSubConfigs和init方法。 Refer
阅读全文
摘要:服务暴露实际上就是启动server本地监听,并且将服务信息注册到注册中心上。在dubbo:service上的export可以指定是否暴露,同时provider也可以指定延迟暴露的时间。 if (!shouldExport()) { // 判断是否暴露服务,由dubbo:service export=
阅读全文
摘要:Dubbo在配置的提供上,提供了丰富的功能,也考虑了很多场景,具体可以参考官方文档。其中配置的来源也有很多,包括了外部的配置中心,这些配置是如何获取,如何解析,最后如何在dubbo中生效的呢?带着这些疑问,学习一下dubbo provider启动流程。这边还是第一章以API方式入手,入口在servi
阅读全文
摘要:dubbo中自己实现了不同于java的SPI插件化机制,使得Dubbo可以在对多个指定的目录中加载扩展实现,同时与Java SPI不同的是可以实现按需加载。 Dubbo的扩展SPI有如下特点:1. 单例,对于某个类型扩展,只会有一个ExtensionLoader;2. 延迟加载,可以一次只获取想要的
阅读全文
摘要:本章节将会介绍dubbo 2.7.1的项目工程结构,以及一个简单的helloworld来运行,让读者对dubbo有一个更加直观的了解。 项目结构: dubbo-common 公共逻辑子项目,定义了各子项目中 通用的 组件 和 工具类,如:IO、日志、配置处理等。 dubbo-rpc 分布式协调服务框
阅读全文