netty的http client连接池设计

使用netty作为http的客户端,pool又该如何进行设计。本文将会进行详细的描述。

1 复用类型的选型

1.1 channel 复用

多个请求可以共用一个channel

模型如下

                    

 特点

       1:callback队列为回调队列。 不同的callback通过一个全局的id进行标识。发送的时候会把该id发到服务端,服务端在回复的时候必须把该id再返回到客户端。

       2:获取连接只需要随机获取一个channel即可,将callback添加到队列里面。

       3: 获取连接时消除了锁的竞争,性能高效。

       4:结构简单。

  实例

       osp(唯品会的SOA框架) client pool实现(thrift协议); spray的akka client pool。

  约束

       需要服务端配合支持channel复用。需要有一个全局唯一的id用于识别请求。 通常id先发给服务端,服务端还要把id会给客户端。

1.2 channel 独享

 每个请求独立使用一个channel。

 模型如下

         

 特点

     1:同一个channel同时只给一个request使用。

     2:连接池的设计较为复杂。

 实例

     1:数据库连接池[druid,c3p0,dbcp,hikaricp,caelus(唯品会内部连接池)]

      2:netty的http pool ; apache的httpclient pool, httpasyncclient pool ; nginx的pool。

1.3 选择 

    由于http1.1协议原生不支持channel复用(http2是支持的),如果需要支持,则需要在header里面加入一个唯一id,所有的应用服务器均需要进行改动。为了和nginx的连接池保持一致,确定使用channel的独享方式

2 组件选型

 

组件
优点
缺点
common-pool 功能完整 不支持异步连接
rxnetty pool 功能完整,支持netty 使用的为rxjava机制
netty pool netty原生实现
  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值