NoSQL客户端超时设置
Redis
以Jedis客户端为例,通过如下配置分配等待获取连接池连接的超时时间和网络连接/读超时时间:
PoolJedisConnectionFactory connectionFactory = new PoolJedisConnectionFactory();
//获取连接池连接的超时时间,默认-1L,即不进行限制
connectionFactory.setMaxWaitMillis(maxWaitMillis);
//网络连接/读超时时间:默认2000毫秒
connectionFactory.setTimeout(timeoutInMillis);
Jedis在建立Socket时通过如下代码设置超时。
this.socket.connect(new InetSocketAddress(this.host, this.port),this. timeout);
this.socket.setSoTimeout(this.timeout);
配置全局默认的Socket连接/读超时
可以在JVM启动时通过添加如下参数,来配置默认全局的Socket连接/读超时。即如Httpclient、JDBC等,如果没有配置socket超时,则默认会使用该超时。
-Dsun.net.client.defaultConnectTimeout=60000-Dsun.net.client.defaultReadTimeout=60000
MongoDB
MongoDB提供了多个版本的Java客户端驱动。基本选项如下(详见com.mongodb.MongoOptions
):
<beans>
<mongo:mongo host="localhost" port="27017">
<mongo:options connections-per-host="8"
threads-allowed-to-block-for-connection-multiplier="4"
<!---->
connect-timeout="1000"
max-wait-time="1500"
auto-connect-retry="true"
socket-keep-alive="true"
socket-timeout="1500"
slave-ok="true"
write-number="1"
write-timeout="0"
write-fsync="true"/>
</mongo:mongo/>
</beans>
参数说明:(单位均为毫秒)
connect-timeout
:新建socket连接时的超时,默认为0,表示不限制socket_timeout
:I/O读写操作时,socket连接的超时,默认为0,表示不限制max-wait-time
:某个线程获取连接时最大等待时间,默认12000,即12s,0表示不限制write-timeout
:写操作的超时时间,默认0,表示不限制
参考
MongoDB进阶(八)Spring整合MongoDB(Spring Data MongoDB)
《亿级流量网站架构核心技术》:超时与重试机制
Last updated