不推荐使用Netty自带连接池ChannelPool

首先,网上关于Netty自带连接池ChannelPool的文章很少,推测一下原因可能是因为大家使用Netty时多数都是做为服务端来应用,因此基本上用不到连接池。但是如果你使用Netty封装一个HTTP客户端那就必须考虑Channel池了。

不推荐使用内置ChannelPool的原因如下:

  • 没有健康检查机制
    如果server端关闭了连接,那么池中的某个channel会无效,由于缺乏健康检测,这个无效的channel还是会被调用方获取到。
  • 无法剔除(evict)指定Channel
    这个池居然只能添加Channel而不能删除!也就是说如果你明确知道了哪个Channel已经被关闭了,你也没有办法把这个Channel从池中剔除掉,简直了
  • 无法动态控制连接数
    我们在使用数据库连接池的时候都会配置类似于maxActive, maxIdle之类的参数,意思是池中最大允许有多少连接、最大空闲连接等。我们希望能在空闲的时候主动释放掉一些连接来节省资源,繁忙的时候可多创建一些连接。这应该是非常基本的功能了吧,不好意思,不支持!

所以,这个池如果你只是用来写写玩具代码然后发个博客还是没问题的,生产环境就算了,还是使用apache的对象池或者自己实现一个吧。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Netty HttpsURLConnectionPool使用可以分为以下几个步骤: 1. 引入依赖:在项目的构建文件中引入Netty HttpsURLConnectionPool的依赖,例如Maven中的以下依赖: ```xml <dependency> <groupId>io.netty</groupId> <artifactId>netty-handler</artifactId> <version>${netty.version}</version> </dependency> <dependency> <groupId>io.netty</groupId> <artifactId>netty-codec-http</artifactId> <version>${netty.version}</version> </dependency> <dependency> <groupId>io.netty</groupId> <artifactId>netty-codec-http2</artifactId> <version>${netty.version}</version> </dependency> <dependency> <groupId>io.netty</groupId> <artifactId>netty-transport-native-epoll</artifactId> <version>${netty.version}</version> </dependency> <dependency> <groupId>io.netty</groupId> <artifactId>netty-transport-native-kqueue</artifactId> <version>${netty.version}</version> </dependency> <dependency> <groupId>io.netty</groupId> <artifactId>netty-common</artifactId> <version>${netty.version}</version> </dependency> <dependency> <groupId>io.netty</groupId> <artifactId>netty-resolver-dns-native-macos</artifactId> <version>${netty.version}</version> </dependency> <dependency> <groupId>io.netty</groupId> <artifactId>netty-tcnative-boringssl-static</artifactId> <version>${netty.version}</version> </dependency> ``` 其中 `${netty.version}` 是Netty框架的版本号。 2. 创建连接池使用Netty提供的`HttpClient`类创建一个连接池实例,例如: ```java EventLoopGroup workerGroup = new NioEventLoopGroup(); HttpClient httpClient = HttpClient.create() .eventLoopGroup(workerGroup) .secure(); ``` 这里使用了NIO的`NioEventLoopGroup`作为工作线程池,调用了`secure()`方法启用了HTTPS安全连接。 3. 发送请求:通过连接池发送请求,例如: ```java HttpResponse response = httpClient .request(HttpMethod.GET) .uri(uri) .response() .block(); ``` 这里使用Netty提供的`HttpResponse`类来接收响应结果。 4. 关闭连接:使用连接池后,需要调用`dispose()`方法关闭连接池,例如: ```java httpClient.dispose(); workerGroup.shutdownGracefully(); ``` 这里同时关闭了工作线程池。 综上所述,使用Netty HttpsURLConnectionPool连接池的过程比较简单,主要是创建连接池、发送请求和关闭连接池三个步骤。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值