dubbo源码分析
文章平均质量分 70
岁月人
极客精神,热衷源码探索,持续学习
跟随云原生脚步,探索深度学习方向
展开
-
dubbo源码分析第二十九篇一dubbo3.0拥抱云原生
IDL语言在服务网格体系下,dubbo也期望能够做到语言栈大一统能够支持java,go,等等语言那么我们采用IDL语言来定义dubbo接口定义跨语言idl文件DemoService.protosyntax = "proto3";option java_multiple_files = true;option java_package = "org.apache.dubbo.demo";option java_outer_classname = "DemoServiceProto";原创 2022-01-23 23:04:58 · 863 阅读 · 0 评论 -
dubbo源码分析第二十八篇一dubbo3.0拥抱云原生
cloud-native 简介: 每一种概念,都需要一种技术支撑k8s+docker做为底层基础设施Jenkins + git + 自建devops 等等作为服务发布部署工具服务治理: istio ,dubbo3.0等实现治理: 包含服务发现,负载,流量控制等文章目录应用级注册中心应用级注册中心demo消费者配置提供者配置k8s-apiserver作为注册中心(dns方案忽略)消费者属性配置消费者配置消费者启动配置提供者属性配置提供者配置提供者启动配置注册内容mapping映射信息metadat.原创 2022-01-23 22:50:08 · 1353 阅读 · 0 评论 -
dubbo源码分析第二十七篇一SPI常用自适应动态代理类一源码
SPI常用动态自适应代理类源码Protocol$Adaptivepublic class Protocol$Adaptive implements Protocol { public void destroy() { throw new UnsupportedOperationException("The method public abstract void org.apache.dubbo.rpc.Protocol.destroy() of interface org.ap原创 2022-01-20 17:39:25 · 764 阅读 · 0 评论 -
dubbo源码分析第二十六篇一高级特性
文章目录I 泛化引用示例一demo原理简介II 本地存根示例一demo原理简介III 回声测试示例一demo原理简介IV 优雅停机总结I 泛化引用示例一demo<dubbo:reference id="barService" interface="com.foo.BarService" generic="true" />GenericService barService = (GenericService) applicationContext.getBean("barService"原创 2022-02-11 22:00:21 · 159 阅读 · 0 评论 -
dubbo源码分析第二十五篇一dubbo负载均衡一ShortestResponseLoadBalance加权最短响应时间
这里写目录标题原理源码原理同最小活跃数负载,算法框架完全相同计算最小响应时间[总成功请求时间/总成功请求个数 * 当前活跃数]当前活跃数通过filter机制实现,同LeastActiveLoadBalance当前请求时间和个数通过ActiveLimitFilter过滤机制实现源码获取最短响应时间Invoker集合只有一个返回,存在多个根据权重获取protected <T> Invoker<T> doSelect(List<Invoker<原创 2022-01-21 01:20:50 · 1544 阅读 · 0 评论 -
dubbo源码分析第二十四篇一dubbo负载均衡一RandomLoadBalance一RoundRobinLoadBalance
这里写目录标题RandomLoadBalanceRoundRobinLoadBalanceRandomLoadBalance权重不同则加权随机权重相同则直接随机权重同最小活跃数一样,前10分钟预热阶段,权重从0到配置的weight随时间平滑增长 protected <T> Invoker<T> doSelect(List<Invoker<T>> invokers, URL url, Invocation invocation) {原创 2022-01-21 01:01:32 · 1549 阅读 · 0 评论 -
dubbo源码分析第二十三篇一dubbo负载均衡-LeastActiveLoadBalance与预热机制
文章目录LeastActiveLoadBalance源码分析预热机制LeastActiveLoadBalance通过ActiveLimitFilter设置每个Invoker方法的活跃数,方法调用前+1,调用后-1获取活跃数最小的Invoker存在多个最小活跃数相同Invoker,根据权重配置随机获取存在多个最小活跃数相同Invoker,权重全部相同,随机获取源码分析根据Invoker信息计算最小活跃数Invoker根据最小活跃数数量,判断直接获取Invoker,加权随机获取Invok原创 2022-01-21 00:49:42 · 794 阅读 · 0 评论 -
dubbo源码分析第二十二篇一dubbo负载均衡-ConsistentHashLoadBalance及一致性hash算法
ConsistentHashLoadBalance原理图第一步: 基于网络地址hash构建虚拟一致性hash表获取接口与方法名每一个方法一个一致性hash选择通过选择器选择一个Invoker基于调用方法参数值hash获取hash结果选择器选择Invoker的依据: 方法的参数值hash以及参与hash的方法参数数量默认只有第一个参数的参数值参与hash protected <T> Invoker<T> doSelect(List<Invoker&l原创 2022-01-20 17:26:18 · 1496 阅读 · 0 评论 -
dubbo源码分析第二十一篇一dubbo集群容错策略-ZoneAwareCluster区域调用
背景服务部署亚洲区域和欧洲区域两个集群自然希望亚洲区域消费者先调用亚洲区域集群,失败在调用欧洲区域集群eureka中出现zone概念,类似dubbo这里的调度策略ZoneAwareClusterInvoker存在首选的优先首选调用调用同区域无同区域且必须同区域调用则报错负载均衡一次选择一个可用所有提供者选择一个可用的强行调用 public Result doInvoke(Invocation invocation, final List<Invoker<T&原创 2022-01-20 02:15:30 · 884 阅读 · 0 评论 -
dubbo源码分析第二十篇一dubbo集群容错策略-ForkingCluster并行调用
ForkingClusterInvoker并行调用forks数量的提供者【并非调用所有】谁先返回结果则先返回消费者支持timeout超时配置 通过阻塞队列的超时机制实现cluster集群层级超时同时底层请求层依旧采用timeout机制public Result doInvoke(final Invocation invocation, List<Invoker<T>> invokers, LoadBalance loadbalance) throws RpcExcep原创 2022-01-20 01:56:24 · 599 阅读 · 0 评论 -
dubbo源码分析第十九篇一dubbo集群容错策略-FailoverCluster失败重试
文章目录FailoverClusterInvoker总结FailoverClusterInvoker重试会重新调用list(获取提供者集合外加路由)获取最新Invoker结果,因提供者可能有变动,重新获取本地缓存,确保监听变更后的RegisterDirectory能被及时感知重试通过循环实现 public Result doInvoke(Invocation invocation, final List<Invoker<T>> invokers, LoadBalance原创 2022-01-20 01:47:48 · 840 阅读 · 0 评论 -
dubbo源码分析第十八篇一dubbo集群容错策略-FailfastCluster与FailsafeCluster
文章目录FailfastClusterInvokerFailsafeClusterInvokerFailfastClusterInvoker失败后直接抛出异常 public Result doInvoke(Invocation invocation, List<Invoker<T>> invokers, LoadBalance loadbalance) throws RpcException { checkInvokers(invokers, invoc原创 2022-01-20 01:40:24 · 2318 阅读 · 0 评论 -
dubbo源码分析第十七篇一dubbo集群容错策略-FailbackCluster与时间轮
文章目录前言FailbackCluster作用BroadcastClusterBroadcastClusterInvoker时间轮算法原理图前言cluster可选策略mock=org.apache.dubbo.rpc.cluster.support.wrapper.MockClusterWrapperfailover=org.apache.dubbo.rpc.cluster.support.FailoverClusterfailfast=org.apache.dubbo.rpc.cluster.原创 2022-01-20 00:16:45 · 665 阅读 · 0 评论 -
dubbo源码分析第十六篇一dubbo集群容错策略-BroadcastCluster广播
文章目录前言BroadcastCluster作用BroadcastClusterBroadcastClusterInvoker前言cluster可选策略mock=org.apache.dubbo.rpc.cluster.support.wrapper.MockClusterWrapperfailover=org.apache.dubbo.rpc.cluster.support.FailoverClusterfailfast=org.apache.dubbo.rpc.cluster.support原创 2022-01-18 16:27:22 · 201 阅读 · 0 评论 -
dubbo源码分析第十五篇一dubbo远程调用第五小节一消费端接收消息响应应用程序
这里写目录标题流程图示HeaderExchangeHandler.handleResponse一消费者接收响应总结流程图示通过编解码器完成解码通过nettyClientHander衔接dubbohandler和netty handlernettyClient 作用dubbo handler 的总入口触发MultiMessageHandler到HandlerExchangeHandler的调用HandlerExchangeHandler为消费者接收响应的调用终止,比服务端接收request的处理少原创 2022-01-18 02:43:41 · 596 阅读 · 0 评论 -
dubbo源码分析第十四篇一dubbo远程调用第四小节一服务端收发消息
文章目录接收流程概览编解码源码分析InternalDecoder.decode - 接收消息入口DubboCountCodec.decodeExchangeCodec.decode完成消息体反序列化handler源码分析nettyServerHandler.channelRead入口分析MultiMessageHandler.received 多消息处理HeatBeatHandler.received心跳消息处理AllChannelHandler.received线程池策略-固定200线程同步池线程池内核参原创 2022-01-18 02:13:04 · 982 阅读 · 0 评论 -
dubbo源码分析第十三篇一dubbo远程调用第三小节一消费端remote层发送消息核心源码解析
文章目录流程图示源码分析Client.request触发channel调用HeaderExchangeChannel.request[核心]DefaultFuture.newFuture实现真正异步逻辑NettyClient.sendNettyChannel.send完成netty消息发送总结扩展一 NettyChannel扩展一 NettyClientHandler与NettyServerHandler扩展一 NettyClient流程图示HeaderExchangeChannel完成请求响应对象的原创 2022-01-17 23:53:29 · 1201 阅读 · 0 评论 -
dubbo源码分析第十二篇一dubbo远程调用第二小节一消费端rpc层发送消息核心源码解析
这里写目录标题流程图示源码分析InvokerInvocationHandler.invokeMockClusterInvoker.invoke容错降级AbstractClusterInvoker.invoke 获取负载均衡实现以及服务端集合FailoverClusterInvoker.invoke 支持重试的clusterInvokerCallbackRegistrationInvoker监听过滤AsyncToSyncInvoker.invoke异步转同步dubboInvoker.doinvoke调用rem原创 2022-01-17 23:01:46 · 876 阅读 · 0 评论 -
dubbo源码分析第十一篇一dubbo远程调用第一小节一概览
文章目录远程调用架构图远程调用过程中请求与响应的映射总结远程调用架构图第一部分 rpc层一消费者发送消息[容错->路由->负载均衡-> 调用remote]第二部分 remote层一消费者发送消息[handler基本不工作->codec]第三部分 remote层一服务端接收消息[codec->handler]第四部分 rpc层一服务端接收消息[dubbo内部handler->wrapper->ref接口]第五部分 remote层一服务端发送消息[hand原创 2022-01-17 22:18:04 · 847 阅读 · 0 评论 -
dubbo源码分析第十篇一提供者端通信NettyServer
文章目录原理图源码分析DubboProtocol.openServercreateServer通过HeaderExchanger创建ExchangeServerTransporter完成bindNettyServer构建doOpen实现netty编排总结原理图与dubbo消费者的exchange transport codec基本一致区别在于 transport层虽都是netty,一个是NioServerSocketChannel,一个是NioSocketChannel源码分析DubboPr原创 2022-01-16 22:37:22 · 1202 阅读 · 0 评论 -
dubbo源码分析第九篇一消费者通信NettyClient
这里写目录标题通信协议图示二级目录三级目录通信协议图示二级目录三级目录原创 2022-01-16 03:10:58 · 1958 阅读 · 0 评论 -
dubbo源码分析第八篇一服务引用内核剖析
这里写目录标题服务引用原理图一服务引用原理图二源码分析ReferenceBean获取消费者代理对象createProxy 创建消费者接口动态代理RegistryProtocol.doRefer第一部分RegistryProtocol.doRefer核心RegistryDirectory.subscribeZookeeperRegistry.doSubscribeZookeeperRegistry.notifyRegistryDirectory.notify通知核心RegistryDirectory.refr原创 2022-01-15 23:34:49 · 1452 阅读 · 0 评论 -
dubbo源码分析第七篇一服务暴露第三小节一远程暴露内核剖析
文章目录多注册中心遍历暴露JavassistProxyFactory.getInvoker获取可执行体ExportRegistryProtocol.exportRegistryProtocol.export一核心实现DubboProtocol.export总结扩展点一Wrapper实现扩展点一dubbo URL详解扩展点一zk Listener 在dubbo中的使用详解ZK数据结构详解多注册中心遍历暴露遍历注册中心进行服务暴露构建Invoker,Invoker含ref应用程序目标对象及避免反射从而提原创 2022-01-13 01:23:54 · 1841 阅读 · 0 评论 -
dubbo源码分析第六篇一服务暴露第二小节一Invoker构建与exportor暴露
addSingletonFactory(beanName, () -> getEarlyBeanReference(beanName, mbd, bean));protected Object getEarlyBeanReference(String beanName, RootBeanDefinition mbd, Object bean) { Object exposedObject = bean; if (!mbd.isSynthetic() && hasIn原创 2022-01-10 13:52:00 · 2234 阅读 · 0 评论 -
dubbo源码分析第五篇-服务暴露第一小节
文章目录服务export入口ServiceBean 完成自身暴露doExportUrls多个注册中心URL暴露服务单协议向多注册中心暴露总结扩展服务export入口ApplicationListener触发服务暴露public class DubboBootstrapApplicationListener extends OneTimeExecutionApplicationContextEventListener implements Ordered { private原创 2022-01-09 17:06:20 · 1884 阅读 · 0 评论 -
dubbo源码分析第四篇-dubbo-spi源码分析
文章目录ExtensionLoader简介ExtensionLoader构造方法介绍ExtensionFactory简介获取接口的ExtensionLoadergetAdaptiveExtension获取接口自适应对象ExtensionLoader简介常用方式获取自适应实例获取激活实例合集获取默认实例根据名称获取实例获取自适应类或者动态代理类获取类上配置了@Activate的集合获取@SPI注解val配置实例根据dubbo spi文件的k-v结构获取指定实例Ex原创 2022-01-09 22:36:50 · 2430 阅读 · 0 评论 -
dubbo源码分析第三篇-dubbo-spi介绍
文章目录dubbo spi 简介dubbo spi 查找位置spi文件内容二级目录三级目录dubbo spi 简介涉及注解注解作用SPI起标注作用,但当value不为空,value表示spi默认实现Adaptive可放置类与方法上,放置类上表示接口的Adaptive类放置在方法上,通过动态代理调用相应方法Activate一般放置在类上,表示其是一个激活类Adaptive用法1类上: 此时获取的自适应类是非动态代理类,由该类自行完成方法调用逻辑Co原创 2022-01-09 17:35:46 · 2989 阅读 · 0 评论 -
dubbo源码分析第二篇-dubboxml启动-DubboNamespaceHandler结合spring完成Dubbobeandefinition加载-service注解为例
这里写目录标题NamespaceHandlerSupport机制简介DubboNamespaceHandler完成dubbo自定义标签解析成beandefinition过程构建Beandefinition总结NamespaceHandlerSupport机制简介spring允许框架开发者自定义xml标签完成beandefinition解析注册其按照以下规范进行1 spring.handlers2 spring.schemas 作用:在解析XML文件时将XSD重定向到本地文件,避免在解析XML文原创 2022-01-09 15:47:39 · 1945 阅读 · 0 评论 -
dubbo源码分析-前言
文章目录dubbo源码总览dubbo源码总览dubbo基于xml启动dubbo spidubbo 服务暴露dubbo 服务引用dubbo 服务调用dubbo 监听注册中心dubbo exchange transport codec 三层源码分析dubbo 常用特性dubbo 3.0展望原创 2022-01-09 14:49:53 · 2098 阅读 · 0 评论