通用池化框架实践之GenericKeyedObjectPool

本文介绍了在gRPC接口测试中如何使用Apache Commons Pool2的GenericKeyedObjectPool实现键值对象池,以实现根据不同分片连接不同节点。内容包括可池化类、池化工厂类的创建,以及对象池的使用,并讨论了性能和线程安全问题。作者计划后续进行性能测试并对比GenericObjectPool。
摘要由CSDN通过智能技术生成

前两天写了一篇文章介绍commons-pool2这个通用池化框架 通用池化框架commons-pool2实践,其中提到了可以池化一个对象和一组对象,一个对象用到了GenericObjectPool这个类,一组对象用到了GenericKeyedObjectPool这个类。

一开始我以为后者比较复杂,所以放弃了尝试,今天在写gRPC接口测试Demo,根据分片不同进行负载均衡连接不同节点的过程中,遇到了一个障碍。就是在服务调用gRPC的时候已经完成了自动负载均衡,我调用的SDK就需要自己实现根据不同分片连接不同的节点,这就用到了GenericKeyedObjectPool。

顾名思义,键值对象池。就是通过一个key对应一个对象类型来组合对象池,其本质上就是一个Map,key是自定义,value就是org.apache.commons.pool2.ObjectPool,而但对象池化类GenericObjectPool也是实现了这个接口。

经过查询源码注释有两点需要注意:

Map的用的ConcurrentHashMap,是线程安全的。
获取和回收太频繁,会遇到性能问题。
关于第二点,我有机会在做一期两者的性能测试。我现在用的是gRPC的连接对象io.grpc.ManagedChannel,而且每个类对象绑定的对象是io.grpc.stub.AbstractBlockingStub并不会场景去连接池中获取新连接,一个gRPC连接可以支撑N(资料称该值100左右,后续我计划50个线程公用一个连接)个线程的并发,所以暂时不用担心这个性能问题。

根据上次文章的记录的顺序分成了三部分。

可池化类
首先我们需要一个可以被池化的对象,代码同上期文章。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值