redis It seems like server has closed the connection

匿名 (未验证) 提交于 2019-12-03 02:31:01

问题:

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 version:redis-3.0.3

jedis version:2.3.0

os:OS X Yosemite 10.10.5

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

Jedis jedis = new Jedis("127.0.0.1", 6379); jedis.publish("/atm/test", "lqiaing---hello"); 

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!

回答1:

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?.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!