我订阅了redis的一个key过期订阅的消息,在程序刚启动的时候能够正常获取到消息,但是过一段时间后就再也无法获取到消息了,需要重启程序!
猜测是不是因为连接空闲时间太长,但是连接没有断开。是不是需要设置心跳时间,是的话,到怎么设置
RedisService RedisService= config.getIoc().get(RedisService.class);
new Thread() {
public void run() {
TopicMessageListener listener = new TopicMessageListener();
log.info("开始监听Redis事件......");
RedisService.psubscribe(listener, "__keyevent@0__:expired");
}
}.start();
public class TopicMessageListener extends JedisPubSub {
private static final Log logger = Logs.get();
// 取得订阅的消息后的处理
public void onMessage(String channel, String message) {
// System.out.println(channel + "=" + message);
logger.infof("收到redis事件onMessage:%s = %s", channel, message);
}
// 取得按表达式的方式订阅的消息后的处理
public void onPMessage(String pattern, String channel, String message) {
logger.infof("收到redis事件onPMessage:%s = %s = %s", pattern, channel, message);
}
public static void main(String[] args) {
JedisPool jedisPool =new JedisPool("119.23.144.5",6379);
new Thread() {
public void run() {
while (true){
TopicMessageListener listener = new TopicMessageListener();
System.out.println("开始监听Redis事件......");
jedisPool.getResource().psubscribe(listener, "__keyevent@0__:expired");
}
}
}.start();
}
}
@wendal
加了try-catch和while true 但是过一会并没有进catch 块 这样也不行 。还是过几分钟之后就收不到了
JedisPool jedisPool =new JedisPool("119.23.144.5",6379);
new Thread() {
public void run(){
while (true){
logger.info("开始订阅redis---------");
TopicMessageListener listener = new TopicMessageListener();
Jedis redis = jedisPool.getResource();
try {
redis.psubscribe(listener, "__keyevent@0__:expired");
}catch(JedisConnectionException e){
logger.warn("Exception :", e);
logger.warn("Exit redis psubscribe, retry after 1 second");
}catch(Exception e){
logger.error("Exception:", e);
}
try{
Thread.sleep(1000);
}catch(Exception unused){
}
try{
if(redis != null){
redis.close();
}
}catch(Exception unused){
}
}
}
}.start();
JedisPool jedisPool =new JedisPool("119.23.144.5",6379);
new Thread() {
public void run(){
while (true){
logger.info("开始订阅redis---------");
TopicMessageListener listener = new TopicMessageListener();
Jedis redis = jedisPool.getResource();
try {
redis.psubscribe(listener, "__keyevent@0__:expired");
}catch(JedisConnectionException e){
logger.warn("Exception :", e);
logger.warn("Exit redis psubscribe, retry after 1 second");
}catch(Exception e){
logger.error("Exception:", e);
}
try{
Thread.sleep(1000);
}catch(Exception unused){
}
try{
if(redis != null){
redis.close();
}
}catch(Exception unused){
}
}
}
}.start();
public static void main(String[] args) {
JedisPool jedisPool =new JedisPool("119.23.144.5",6379);
new Thread() {
public void run(){
while (true){
logger.info("开始订阅redis---------");
TopicMessageListener listener = new TopicMessageListener();
Jedis redis = jedisPool.getResource();
try {
redis.psubscribe(listener, "__keyevent@0__:expired");
}catch(JedisConnectionException e){
logger.warn("Exception :", e);
logger.warn("Exit redis psubscribe, retry after 1 second");
}catch(Exception e){
logger.error("Exception:", e);
}
try{
Thread.sleep(1000);
}catch(Exception unused){
}
try{
if(redis != null){
redis.close();
}
}catch(Exception unused){
}
}
}
}.start();
}
JedisPool jedisPool =new JedisPool("119.23.144.5",6379);
new Thread() {
public void run(){
while (true){
logger.info("开始订阅redis---------");
TopicMessageListener listener = new TopicMessageListener();
Jedis redis = jedisPool.getResource();
try {
redis.psubscribe(listener, "__keyevent@0__:expired");
}catch(JedisConnectionException e){
logger.warn("Exception :", e);
logger.warn("Exit redis psubscribe, retry after 1 second");
}catch(Exception e){
logger.error("Exception:", e);
}
try{
Thread.sleep(1000);
}catch(Exception unused){
}
try{
if(redis != null){
redis.close();
}
}catch(Exception unused){
}
}
}
}.start();
}
public JedisPool jedisPool =new JedisPool("119.23.144.5",6379);
public void execute() {
while (true) {
try {
TopicMessageListener listener = new TopicMessageListener();
Jedis redis = jedisPool.getResource();
redis.psubscribe(listener, "__keyevent@0__:expired");
} catch(Throwable e) {
log.info(e.getMessage(), e);
}
Lang.quiteSleep(1000);
}
}