Netty第二章 2020 7-4——Netty在Dubbo中的应用(3)关于单一长连接
dubbo中单一长连接的理解和常见误区
1.低版本dubbo
dubbo默认是单一长连接,那么这个默认在哪里,长连接又是什么意思,单一长连接又是什么意思呢?
首先dubbo底层用的是netty,所以长连接说的也是通过netty创建的连接,本文主要说的是dubbo中单一长连接的概念和理解,关于netty不做更多展开。
话不多说,直接上源码:
DubboProtocol在refer的时候,也就是consumer端启动去发现服务的时候,会调用getClients方法
该方法会检查xml中配置的一个叫做connections的参数,如果用户没有配置,那么缺省配置就是0,0代表共享连接,会调用getSharedClient这个方法而不是initClient方法。getSharedClient方法中会从一个叫做referenceClientMap的连接缓存中,该缓存的key是ip+端口,value就是client,所以就做到了ip+端口唯一对应一个client,这就是单一长连接的概念——consumer端所有的dubbo服务,无论有多少个service,都共享这一个连接。
如果对于service A,connections不是0(connections是配置在service上的),用户自己配置了一个非零的值N,那么就不会走getSharedClient,而是走initClient,产生的效果就是consumer端的service A(refer A的时候),会初始化N个client。同时,对于service B,connections配置了M,那么refer B的时候,会初始化M个client。
总结一下,connections无非就是0,1和N三种配置情况,为了容易理解:
- 0就可以记成全局配置,所有配置了0的service,每次调用都复用同一个长连接
- 1可以理解为单个service的配置,配置1的service,对于该service的每次调用都使用同一个长连接
- N也是单个service的配置,配置N的service,对于该service的每次调用都从这N个长连接中选一个(按照路由规则)
其实大部分文章中都描述为0和非0两种情况,这里写出三种情况,其实后两种的1和N都是非0情况,单列出1是为了方便理解,因为有些同学误解单一长连接的时候其实误解的就是1这种情况,配置了1的service其实在发起对该service调用的时候也是单一长连接,可以叫做服务级别单一长连接,但是和配置了0的全局单一长连接还是不一样的。
其实上面这个实现里还有个问题,从上面提到的connections的三种赋值方式,仔细想想我们可以看出,如果我想要全局配置,但同时这个全局共享的连接数不唯一,该怎么配置呢?是做不到的,因为全局默认代码里写死了是1,而非1的写法只能用来配置单service的共享连接数。不过新版dubbo对于这一点做了一些改动,让我们这个梦想得以实现,详情见下文。
2.社区dubbo 2.7.x
新版dubbo获取连接依然调用了DubboProtocol的getClients方法,直接上代码:
这里除了使用connections之外,同时还搭配了另外一个配置shareconnections,如果这个也不配置,那么就和旧版本一样,都是1,即1个连接。如果配置了具体值,那么就可以实现上面说的,全局所有service共享长连接,但是不是单一长连接,而是N个长连接。
Netty第二章 2020 7-4——Netty在Dubbo中的应用(3)关于单一长连接相关推荐
- Netty第二章 2020 3-9 Netty源码之flush优化
1.Netty的flush优化handler--FlushConsolidationHandler Netty的实现更复杂一些,对于用单独线程池处理业务的场景,有一些特殊的处理和优化,比如如果异步处理 ...
- 网络协议和Netty——第二章 Java原生网络编程学习笔记
编程中的Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说, ...
- 《Netty In Action》第二章:第一个Netty程序
2019独角兽企业重金招聘Python工程师标准>>> 源码地址: GitHub 2.3 编写一个应答服务器 写一个Netty服务器主要由两部分组成: 配置服务器功能,如线程.端口 ...
- 数据结构与算法(C#版)第二章 C#语言与面向对象技术(中)V1.0
由于本学期我给本科生上<数据结构与算法>这门课程,边上边把自己的教案进行总结,发到CSDN上面,希望大家多多指正. 第二章 C#语言与面向对象技术(中) 二.面向对象技术 1.类与对象 2 ...
- Kotlin学习笔记 第二章 类与对象 第九节 泛型
参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...
- PHP核心技术与最佳实践 读书笔记 第二章 面向对象的设计原则
2019独角兽企业重金招聘Python工程师标准>>> 第二章 面向对象的设计原则 2.1 面向对象设计的五大原则 单一职责原则 接口隔离原则 开放-封闭原则 替换原则 依赖倒置原则 ...
- 汇编 第二章 寄存器
在我看来,第二章中主要围绕着6个寄存器展开阐述.它们分别是AX.BX.CX.DX.CS.IP. 在此之前,通过本章的学习,使我对CPU这一概念又有了更深一步的认识. 1.CPU中字长与位宽的区别 通常 ...
- [XJTUSE]计算机图形学第二章作业,使用OpenGL编程实现DDA、中点画线和Bresenham算法和中点画圆法
首先是Windows10 + Visual Studio 2019 搭建OpenGL环境可以查看如下链接: 萌新向!!!Windows10 + Visual Studio 2019 搭建OpenGL环 ...
- 工程电磁场导论第二章总结
第二章 恒定电场 2.1导电媒介中的电流 在静电场中,导体内电场强度为零,导体内部没有电荷的运动.在导电媒介中,电荷的 运动形成的电流称为传导电流.在自由空间中,电荷的运动形成的电流称为运流电流. 电 ...
最新文章
- 【hexo】搭建个人bolg日志 day1
- 第18章:MYSQL分区
- 技术图文:排序技术在求解算法题中的应用
- android-sdk-windows下载版
- python秒转化为时间格式_Python耗费时间秒转 天小时分钟秒 时间格式美化
- Redis详解(六)------ RDB 持久化
- e生保等待期什么意思_买了保险不知道赔什么?一文看懂【保险责任】
- FCM模糊聚类算法python实现
- android系统级浮层,android 新手引导浮层的实现
- 怎样复制秀米html码,秀米微信图文编辑器如何复制?
- vue实战项目-ego商城
- 剑指 Offer 04. 二维数组中的查找
- linux sd卡 分区变大,Linux下使用fdisk命令将高容量SD卡(SDHC)格成两个分区
- Oracle rtrim、to_char函数格式化数字 小数Format展示,FM999990D99
- 洛谷刷题C语言:闰年判断、Apples、洛谷团队系统、肥胖问题、三位数排序
- 模式识别技术漫谈(2)
- 替换空格--《剑指offer》
- 四万高手过招,这份阿里全球数学竞赛试题你真的不要看吗...
- 【Web技术】1176- 前端模块依赖关系分析与应用
- kdb 使用手册指导 1