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端