摘要

dubbo消费者同提供者之间的tcp连接是长连接形式,连接由消费方建立随机端口主动向提供者的dubbo端口发起连接请求,一旦连接建立,除非服务停止、网络异常,否则双方不会主动关闭tcp连接。也就是说dubbo消费方在调用提供者方法时使用的tcp连接都是长连接且是复用的。

TCP建立的时机

在dubbo消费者reference的提供者接口bean被spring实例化时会向注册中心发送消费方数据(比如ZK中此时可在/dubbo/xx.xxService/consumers节点下看到消费方数据),并且在此时会主动向提供者发起连接建立请求。当配置的连接数较大时,建立这些连接会比较耗时(根据某次测试,建立250个tcp连接大约耗时7秒)。

请注意,因为是在bean实例化时建立tcp连接,因此当项目中使用了spring的自动注入功能(比如@Autowired注解),那么在消费方启动过程中会同此被注入的service的提供者建立tcp连接。如果配置了懒加载bean或者使用硬编码方式获取bean(比如applicationContext.getBean),且在启动时没有调用此获取bean的代码,那么在消费者启动后不会同提供者建立tcp连接,此时只有在此getBean代码在首次被执行时消费者才会同提供者之间建立tcp连接,这也是当连接数配置较大时首次访问某些接口会耗时较久的原因之一。

Tcp建立之前,消费者会先向注册中心发送订阅消息,注册中心会将符合条件的提供者数据(比如有N个符合条件的提供者)下发到消费方,此时假如配置的连接数是100,那么此消费者会同这N个提供者之间的每一个提供者建立100个tcp连接。

TCP连接数控制

  1. 根据测试结果看,默认情况下,消费者与提供者之间的tcp连接数为1;
  2. 连接数可以在消费者端或者提供者端控制,配置示例,

提供者端:

<!-- global set in provider -->
<dubbo:provider protocol="dubbo" accepts="10" />or
<!-- global set in provider -->
<dubbo:protocol name="dubbo" accepts="10" />or
<!-- private set in provider -->
<dubbo:service interface="com.frank.OrderService" connections="10" />

消费者端:

<!-- global set in consumer -->
<dubbo:consumer  connections="10" />or
<!-- private set in consumer -->
<dubbo:reference interface="com.frank.OrderService" connections="10"  />

和dubbo其它许多配置类似,接口层面的配置优先级高于全局配置;同样层面的配置消费者端优先于提供者。

消费方同提供方之间的通讯tcp复用机制

如果只有一条tcp连接存在,那么必然只会使用这1个tcp交互;如果与同一个提供者之间存在多条tcp连接,那么会复用这多条连接,此时相当于连接池。具体:

1、当配置了connections并且使用dubbo协议时,每一个service都会建立自己的私有tcp连接,无论这些service是否在同一个提供者中。

比方下面的OrderService、OrderDeliverService均由10.1.50.30:10220提供者提供服务,连接数由消费者控制,其配置为,

<!-- global set in consumer -->
<dubbo:consumer  connections="2" /><!-- private set in consumer -->
<dubbo:reference interface="com.frank.OrderService" connections="3" />
<dubbo:reference interface="com.frank.OrderDeliverService" />

2、当未配置connections时,属于同一个提供者的多个不同service只会共享1条tcp连接同提供者进行通讯。此消费者与10.1.50.30:10220会建立5条dubbo通讯tcp连接,其中3条为OrderService通讯服务,另外2条为OrderDeliverService通讯服务。

另外可参考dubbo官方文档

Config connections | Apache Dubbo

dubbo消费者与提供者之间的tcp长连接相关推荐

  1. Android之间互相的录屏直播 --点对点传输(tcp长连接发送h264)(一)

    前言 转载请注明出处 ,来自: 暂时两篇: (1) Android之间互相的录屏直播 –点对点传输(tcp长连接发送h264)(一) http://blog.csdn.net/baidu_335462 ...

  2. 应用服务器与数据库之间是长连接,要接收多个 tcp 长连接不断发送的数据并存储,哪些数据库或数据存储方案比较合适?...

    在服务器建立服务端,与多个 tcp 连接保持长连接,服务端会根据客户端发送的 token 验证确定是否保持长连接建立"session"缓存, 在某个状态开启时(我称为存储状态),要 ...

  3. 【TCP长连接】使用TCP长连接提升服务性能

    1.概述 在<性能优化篇-理论基础>中,我们知道了提升服务性能的两个思路,分别是提升服务并发能力和降低请求的响应时间(RT).一个请求的响应时间包括两部分,等待时间和执行时间.在<性 ...

  4. 通da信TCP长连接数据算法分析

    点击上方↑↑↑蓝字[协议分析与还原]关注我们 " 分析通da信TCP长连接内部分数据的算法." 作为一款老牌的炒股软件,通da信里面的数据是相当的丰富,免费的也很丰富,准确性也很好 ...

  5. TCP长连接与短链接

    1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次 ...

  6. TCP长连接和短连接

    2019独角兽企业重金招聘Python工程师标准>>> 1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操 ...

  7. java mina长连接短连接_MINA实现TCP长连接(四)——断开重连

    前言 今天涉及以下内容: mina官网及实现客户端需要的jar包 客户端实现重连接涉及到的几个类 重连接在Activity中的使用 效果图和项目结构图 重连接涉及到的类源码 先来波效果图 image. ...

  8. TCP长连接与短连接的区别(转)

    1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次 ...

  9. TCP长连接,短连接

    1. TCP短连接 我们模拟一下TCP短连接的情况,client向server发起连接请求,server接到请求,然后双方建立连接.client向server 发送消息,server回应client, ...

最新文章

  1. 解决root用户不能打开Chromium网页浏览器
  2. spring mvc ajaxform IE下提示下载问题解决
  3. acl 日志记录方式介绍
  4. vc6.0垃圾文件清理工具_干货 | 电脑清理宝典
  5. 学习C# - Hello,World!
  6. fpga中wire和reg的区别
  7. linux5种IO模型以及同步异步,阻塞非阻塞
  8. SqlServer中dateTime、dateTime2、date、datetimeoffset的区别
  9. java excel 晒新年操作_JAVA使用POI操作excel
  10. 20145235李涛《网络对抗》逆向及Bof基础
  11. 使用cfssl生成证书时报json: cannot unmarshal object into Go value of type []csr.Name错误
  12. 学生选课系统代码--分析2需求分析
  13. 4173: 数学 欧拉函数 思路题
  14. 墨尔本大学计算机科学博士怎么样,墨尔本大学计算机科学专业怎么样?成为IT大牛的不二之选...
  15. 拼接播放地址_无极婚礼布置地址,好的婚礼服务多少钱_大伟庆典
  16. Guided Adversarial Attack for Evaluating and Enhancing Adversarial Defenses
  17. 如何在CSS中解决长英文单词的页面显示问题?CSS3
  18. 解决iphone插上mac电脑充电不停的断开和链接问题
  19. python第三方库re库基本介绍
  20. java中高效遍历list_Java中四种遍历List的方法总结(推荐)

热门文章

  1. VS2012的Web.config中使用machineKey
  2. element UI tab拖曳
  3. 传说中的椰糖是什么?它有哪些好处?
  4. 百度地图api不能加载出地图只有格网的问题解决方法
  5. 关系型数据库与分布式数据库
  6. 数据挖掘--(实验二)关联规则实验
  7. qq开放平台申请步骤_实现开放式沟通的8个步骤
  8. 华为鸿蒙已送测,华为鸿蒙OS新机已送测:麒麟985+2K曲面屏+氙气灯彰显华为的实力...
  9. 张靓颖的人脉和她的社会名流“粉丝”们
  10. 一种奇特的DEDE隐藏后门办法