dubbo
文章平均质量分 80
Louis.No1
这个作者很懒,什么都没留下…
展开
-
11 dubbo源码学习_dubbo协议通信
dubbo在通信上也支持非常多的网络协议,而dubbo协议属于dubbo框架自研,整体协议也比较有代表性,采用定长协议头+变长协议休的形式;原创 2023-05-14 23:58:50 · 464 阅读 · 0 评论 -
10 dubbo源码学习_线程池
dubbo内部采用netty做为通信工具,netty包括bossGroup和workerGroup,bossGroup负责接收accept连接,连接就绪后,将连接交给workerGroup进行处理;默认情况下:bossGroup:线程个数:1个,队列长度,Integer.MAX;创建1个NioEventLoop,这个NioEventLoop主要进行accept操作;原创 2023-04-27 12:17:44 · 1845 阅读 · 0 评论 -
09 dubbo源码学习_服务降级
使用方式:mock=“[fail|force]return|throw xxx”fail:表示调用失败时,执行mock方法;如果不指定关键字默认为 failforce:表示不执行远程调用,直接调用mock方法;return表示指定返回结果,throw表示抛出指定异常;当调用目标接口出现异常时,返回return 一个空,就是return null;原创 2023-04-23 21:48:41 · 153 阅读 · 0 评论 -
08 dubbo源码学习_LoadBalance
每收到一个请求,活跃数加1,完成请求后则将活跃数减1。在服务运行一段时间后,性能好的服务提供者处理请求的速度更快,因此活跃数下降的也越快,此时这样的服务提供者能够优先获取到新的服务请求、这就是最小活跃数负载均衡算法的基本思想。它的职责是将网络请求,或者其他形式的负载“均摊”到不同的机器上。通过负载均衡,可以让每台服务器获取到适合自己处理能力的负载。一致性hash负载是参考着一致性hash算法来的,大概意思就是在一个环,节点散落在这个环上,每次获取时,生成一个hash值,在这个节点上获取对应的节点;原创 2023-04-21 23:54:37 · 423 阅读 · 0 评论 -
06 dubbo源码学习_服务路由
参数值,号分隔多个值,比如:host!host = 10.20.153.10 =>以及 URL 上的所有参数,如:application, organization 等。服务调用信息,如:method, argument 等,暂不支持参数路由。URL 本身的字段,如:protocol, host, port 等。=号,表示不匹配,比如:host!=号,表示匹配,比如:host = 10.20.153.10。从这里也可以看出,dubbo的路由是可以方法级别配置的;号结尾表示通配符:host!原创 2023-04-09 23:09:38 · 138 阅读 · 0 评论 -
05 dubbo源码学习_服务目录
Direcotry它有一个核心的list方法,获取服务提供者的列表(消费者调用接口的所有提供者),当服务提供者新注册、下线、变更等操作时,Directory list会随注册中心的变化而变化;RegistryDirectory它实现了NotifyListener,当注册中心发生改变时,会通过NotifyListener.notify方法进行通知,之后会动态更新RegistryDirectory的Invokers list;从这里可以看出,doList其实只是做了通过方法名进行远程方法列表的匹配;原创 2023-04-09 16:55:11 · 307 阅读 · 0 评论 -
04 dubbo源码学习_服务引用
本地服务引用相对比较简单,要求服务暴露和服务引用是在同一个JVM进程内,服务暴露时将服务引用加入到了exportersMap中,那么服务引用时,就是从这个map中获取出服务对象进行调用;通过查看源码,本地引用就是通过exporterMap来存储服务暴露引用,在本地引用时,会对该接口生成一个动态代码的类,而这个Proxy持有着目标服务的引用;远程服务引用也分为两种,直接服务引用和多注册中心/服务提供者;上一篇分析了服务的暴露过程,服务暴露是服务端做的事情,对于客户端来说,他需要做的是服务的引用;原创 2023-03-25 13:01:35 · 59 阅读 · 0 评论 -
03 dubbo源码学习_服务暴露&服务注册
在了解了本地服务暴露之后,再来看一下远程服务暴露,它和本地暴露有非常多的不同,本地暴露只需要将Exporter加入到Map缓存;远程服务暴露的代码我们从:com.alibaba.dubbo.config.ServiceConfig#doExportUrlsFor1Protocol。本地暴露的代码我们从这里开始:com.alibaba.dubbo.config.ServiceConfig#exportLocal。从上面这段代码我们找到了本地暴露和远程暴露的入口;这段代码主要是将远程暴露服务注册到注册中心;原创 2023-03-21 18:56:47 · 320 阅读 · 0 评论 -
02 dubbo源码学习_SPI
而有了生成的这个适配类,可以通过它,做一些条件的解析,查询出具体的实现类,通过调适配类的方式完成对最终实现类的调用;观察它的URL匹配原则,它会从URL中获取simple.ext参数,如果未设置,则默认使用impl1,是因为SimpleExt的SPI(“impl1”)的默认值是它;dubbo的SPI作用主要是扩展性,当一个接口存在多种实现,如何在代码运行过程中,根据不同的参数选择不同的实现;它的作用类似于Spring的IOC,开篇我说了java的SPI是不支持IOC的;原创 2023-03-14 16:23:08 · 223 阅读 · 0 评论 -
01 dubbo源码学习_本地启动源码
学习dubbo源码的第一步就是先把源码下载下来,跑一个demo示例;这里我使用的dubbo是2.6.x,zookeeper的版本是3.5.5。首先启动dubbo-demo-provider,之后再启动dubbo-demo-consumer,观察是否正常通信;github地址:https://github.com/apache/dubbo。源码下载之后,打开idea,导入项目,首先找到:dubbo-demo,分别打开。修改注册中心为zookeeper。原创 2023-03-12 15:46:34 · 227 阅读 · 0 评论