redis似乎服务器已关闭连接 [英] redis It seems like server has closed the connection
问题描述
我想使用redis sub / pub,但是当我订阅一个频道,2分钟后,控制台输出异常:
似乎服务器已关闭连接。
i want to use redis sub/pub, but when i subscribe one channel, 2 minutes after,console output Exception: It seems like server has closed the connection.
redis版本:redis-3.0.3
redis version:redis-3.0.3
jedis版本:2.3.0
jedis version:2.3.0
os :OS X Yosemite 10.10.5
os:OS X Yosemite 10.10.5
Subscribe.class
Subscribe.class
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxIdle(10);
jedisPoolConfig.setMaxWait(4000);
jedisPoolConfig.setTestOnBorrow(true);
JedisPool jedisPool = new JedisPool(jedisPoolConfig, "127.0.0.1", 6379);
final Jedis jedis = jedisPool.getResource();
System.out.println(jedis.configGet("timeout"));
System.out.println(jedis.configGet("tcp-keepalive"));
final JedisPubSub jedisPubSub = new JedisPubSub() {
@Override
public void onMessage(String channel, String message) {
System.out.println("onMessage");
}
@Override
public void onPMessage(String pattern, String channel, String message) {
System.out.println("onPMessage");
}
@Override
public void onSubscribe(String channel, int subscribedChannels) {
System.out.println("onSubscribe");
}
@Override
public void onUnsubscribe(String channel, int subscribedChannels) {
System.out.println("onUnsubscribe");
}
@Override
public void onPUnsubscribe(String pattern, int subscribedChannels) {
System.out.println("onPUnsubscribe");
}
@Override
public void onPSubscribe(String pattern, int subscribedChannels) {
System.out.println("onPSubscribe");
}
};
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(dateFormat.format(new Date()));
jedis.subscribe(jedisPubSub, "/atm/test");
Publish.class
Publish.class
Jedis jedis = new Jedis("127.0.0.1", 6379);
jedis.publish("/atm/test", "lqiaing---hello");
然后在控制台输出后2分钟:
then 2 minutes after console output:
[timeout, 0]
[tcp-keepalive, 0]
2015-12-03 19:01:55
onSubscribe
Exception in thread "main" redis.clients.jedis.exceptions.JedisConnectionException:
It seems like server has closed the connection.
at redis.clients.util.RedisInputStream.readLine(RedisInputStream.java:91)
at redis.clients.jedis.Protocol.processMultiBulkReply(Protocol.java:110)
at redis.clients.jedis.Protocol.process(Protocol.java:63)
at redis.clients.jedis.Protocol.read(Protocol.java:122)
at redis.clients.jedis.Connection.getObjectMultiBulkReply(Connection.java:196)
at redis.clients.jedis.JedisPubSub.process(JedisPubSub.java:88)
at redis.clients.jedis.JedisPubSub.proceed(JedisPubSub.java:83)
at redis.clients.jedis.Jedis.subscribe(Jedis.java:1974)
at Subscribe.main(Subscribe.java:63)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
任何人都可以帮助我吗?非常感谢!
anyone can help me? very thanks!
推荐答案
我不是OSX用户,但它可能是配置为杀死超过TCP连接的操作系统120秒您是否尝试将tcp-keepalive选项设置为某个值(如30秒)以检查连接是否仍然死亡?
I'm not an OSX user but it might be the OS that's configured to kill TCP connections that exceed the 120 seconds. Have you tried setting the tcp-keepalive option in some value (like 30 secs) to check if the connection still dies?.
这篇关于redis似乎服务器已关闭连接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!