gpt4 book ai didi

java - 在 Redis 关闭时处理 KeyEventListener

转载 作者:可可西里 更新时间:2023-11-01 11:37:14 24 4
gpt4 key购买 nike

我在 Redis 上写了以下订阅者,它在内部实例化了监听器:

public class RedisSubscriber extends Thread{

String REDISHOST = "localhost";
int REDISPORT = 6379;
private static RedisSubscriber singleton = null;
private Jedis sub;
private KeyExpiredListener expireListener;

public static synchronized RedisSubscriber getSingleton(){
if(singleton==null){
singleton = new RedisSubscriber();
}
return singleton;
}

private RedisSubscriber(){
sub = new Jedis(REDISHOST, REDISPORT,0);
expireListener = new KeyExpiredListener();
}

public void run() {
//blocking call

LOGGER.info("Inside Run - subscribing");
try{
sub.psubscribe(expireListener, "__key*__:*");
}
catch(JedisConnectionException ex){
ex.printStackTrace();
}
}
}

public class KeyExpiredListener extends JedisPubSub {

@Override
public void onPSubscribe(String pattern, int subscribedChannels) {
System.out.println("onPSubscribe " + pattern + " " +
subscribedChannels);
}

@Override
public void onPMessage(String pattern, String channel, String
message)
{
System.out.println("onPMessage pattern " + pattern + " " + channel
+ " " + message);
}
}
}

在服务器启动时使用以下命令启动 RedisSubscriber- 新线程(RedisSubscriber.getSingleton()).start();

现在如果 Redis 宕机,这个线程就会被杀死。当 Redis 启动时,如何确保我的订阅者再次连接。

谢谢,阿比特。

最佳答案

Connection API 提供了一个connect() 方法。您需要 Client 才能在 JedisPubSub 上运行。因此,请尝试调用该方法重新连接。 Jedis 没有订阅 channel 的状态 AFAIK,因此您必须重新订阅所有 channel 。

其他客户端能够透明地重新连接和恢复连接状态,因此您的应用程序代码中不会出现任何异常。

关于java - 在 Redis 关闭时处理 KeyEventListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31075724/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com