You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Redisson连接AWS加密Redis集群遇ClosedChannelException报错求助

AWS Redis集群(Cluster模式+传输加密)Redisson 3.12.0连接报错排查

环境与配置

  • AWS Redis集群:启用Cluster mode、静态/传输加密,传输加密模式为Preferred
  • 技术栈:Java Spring + Redisson 3.12.0,JDK 1.8.0_362
  • 部署环境:AWS EC2、Jposs
  • 连接代码:
redissonConfig.useClusterServers()
.setKeepAlive(true)
.setConnectTimeout(10000)
.setRetryAttempts(2)
.setDnsMonitoringInterval(10000)
.addNodeAddress("Redis configuration endpoint");
client = Redisson.create(redissonConfig);
  • Redis端点:rediss://ConfigurationEndpoint

报错信息

连接时抛出java.nio.channels.ClosedChannelException,伴随Netty相关警告:

[2023-04-15 14:46:22,296] [redisson-netty-2-3] [WARN] ChannelInitializer- Failed to initialize a channel. Closing: [id: 0x77267167]
io.netty.channel.ChannelPipelineException: io.netty.handler.ssl.SslHandler.handlerAdded() has thrown an exception; removed.
    at io.netty.channel.DefaultChannelPipeline.callHandlerAdded0(DefaultChannelPipeline.java:624) ~[netty-transport-4.1.46.Final.jar:4.1.46.Final]
    at io.netty.channel.DefaultChannelPipeline.addLast(DefaultChannelPipeline.java:223) ~[netty-transport-4.1.46.Final.jar:4.1.46.Final]
    at io.netty.channel.DefaultChannelPipeline.addLast(DefaultChannelPipeline.java:381) ~[netty-transport-4.1.46.Final.jar:4.1.46.Final]
    at io.netty.channel.DefaultChannelPipeline.addLast(DefaultChannelPipeline.java:370) ~[netty-transport-4.1.46.Final.jar:4.1.46.Final]
at java.lang.Thread.run(Thread.java:750) [?:1.8.0_362]
Caused by: java.lang.NoSuchFieldError: TCP_FASTOPEN_CONNECT
    at io.netty.handler.ssl.SslHandler.handlerAdded(SslHandler.java:1979) ~[netty-handler-4.1.72.Final.jar:4.1.72  


[redisson-netty-2-3] [WARN] ChannelInitializer- Failed to initialize a channel. Closing: [id: 0xe1c3fece]
io.netty.channel.ChannelPipelineException: io.netty.handler.ssl.SslHandler.handlerAdded() has thrown an exception; removed.

排查与解决步骤

1. 修复Netty版本冲突

报错核心NoSuchFieldError: TCP_FASTOPEN_CONNECT是因为netty-handler-4.1.72.Final与netty-transport-4.1.46.Final版本不兼容,Redisson 3.12.0默认依赖Netty 4.1.46.Final,需强制统一版本:

  • Maven项目在dependencyManagement中添加:
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
            <version>4.1.46.Final</version>
        </dependency>
    </dependencies>
</dependencyManagement>
  • Gradle项目添加:
configurations.all {
    resolutionStrategy.force 'io.netty:netty-all:4.1.46.Final'
}

2. 补充Redisson SSL显式配置

虽然使用rediss://前缀,仍需显式配置SSL参数适配AWS Redis加密模式:

redissonConfig.useClusterServers()
    .setKeepAlive(true)
    .setConnectTimeout(10000)
    .setRetryAttempts(2)
    .setDnsMonitoringInterval(10000)
    .addNodeAddress("rediss://ConfigurationEndpoint")
    .setSslEnableEndpointIdentification(true)
    .setSslProvider(SslProvider.JDK);
client = Redisson.create(redissonConfig);

3. 验证JDK与网络配置

  • 确认JDK信任库包含AWS Redis的公有CA证书(默认JDK已包含,自定义证书需手动导入)
  • 检查EC2/Jposs安全组允许出站访问Redis集群端口(默认6379)
  • 验证Redis端点解析:在EC2执行nslookup ConfigurationEndpoint确认能正确解析节点IP
  • 确认EC2/Jposs与Redis集群在同一VPC,或通过VPC peering、NAT网关实现网络连通

内容的提问来源于stack exchange,提问作者Osama Jetawe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 20:52:55