如何使用带有vertx的java重新连接到redis?
如果服务器出现故障,我正在处理的应用程序不会重新连接到 redis 服务器.
当我的应用程序启动并且redis服务器仍未运行时,我的应用程序尝试重新连接直到服务器运行并且它们连接。但是当两者连接并且 redis 服务器出现故障时,我的应用程序不会尝试重新连接并开始出错 [ http状态:500 消息:“Redis 连接已断开。” ]
我创建了一个向 redis 发出请求的端点作为测试,我在我的机器上运行服务器,这是我正在使用的测试环境。
我尝试使用 io.vertx.redis.client 包中的 RedisOptions 配置连接但没有成功。你能帮帮我吗?
代码:
private final RedesOptions options = new RedesOptions()
private Redis redisClient;
private void createRedisClient(Handler<AsyncResult<Redis>> handler){
Redis.createClient(vertx, options)
.connect(onConnect -> {
if (onConnect.succeeded()) {
this.redisClient = onConnect.result();
//make sure the client is reconnected o error
this.redisClient.exceptionHandler(e -> {
// attempt to reconnect
attemptReconnect(0);
});
}
// allow further processing
handler.handle(onConnect);
});
}
private void attemptReconnect(int retry){
if (retry > MAX_RECONNECT_RETRIES) {
// we should stop now, as there's nothing we can do.
} else {
System.out.println("erro de conexao >>>> " );
// retry with backoff up to 10240 ms
long backoff = (long) (Math.pow(2, Math.min(retry, 10)) * 10);
vertx.setTimer(backoff, timer -> createRedisClient(onReconnect -> {
if (onReconnect.failed()) {
attemptReconnect(retry + 1);
}
}));
}
}
并在类的构造函数中调用这个方法createRedisClient。
代码:
createRedisClient(onCreate -> {
if (onCreate.succeeded()) {
System.out.println("conectado com sucesso >>> " + onCreate.result());
log.info("Redis Connected: "+onCreate.result());
} else if (onCreate.failed()) {
System.out.println("erro de conexao >>>> " + onCreate.result());
attemptReconnect(0);
}
});
java
database
redis
赞
收藏 0
回答 1
待解决
相关问题
尝试使用 StackExchange.Redis 连接到 AWS Elasticache 时出错
3783浏览 • 1回复 待解决
如何使用ssl连接到PolarDB ?
3128浏览 • 1回复 待解决
telnet 命令为什么能连接到远端mysql或者redis呢?
2303浏览 • 1回复 待解决
连接到数据库REDIS的Svelte自定义商店。
2078浏览 • 1回复 待解决
尝试从 nuxt 3 中间件连接到 redis 客户端,但连接未定义是什么原因呢?
2930浏览 • 1回复 待解决
docker容器内的MySQL、Redis无法连接
3356浏览 • 1回复 待解决
golang redis客户端连接状态
2563浏览 • 1回复 待解决
如何查看使用MongoDB的连接?
4154浏览 • 1回复 待解决
要连接 polardb 和 redis 需要进行哪些配置?
3324浏览 • 1回复 待解决
GitLab中如何使用需要密码的redis?
1853浏览 • 1回复 待解决
在php-fpm环境中,为什么不建议使用mysql长连接,而却允许redis长连接?
3418浏览 • 1回复 待解决
气泡提示框会自动带有圆角 如何去除圆角
1802浏览 • 1回复 待解决
Hi3861开发板串口连接到PC串口无法正常识别,如何解决?
11275浏览 • 1回复 待解决
在Redis的使用中,热Key会给Redis带来哪些常见的的问题?
3066浏览 • 1回复 待解决
ServiceStack.Redis连接池问题求教各位大佬
2610浏览 • 1回复 待解决
springboot 与 redis 连接,无法启动项目的问题
4759浏览 • 1回复 待解决
Hi3516/Hi3518系列开发板串口连接到PC串口无法正常识别,如何解决?
9075浏览 • 1回复 待解决
相机的surface可以直接到encoder吗
1663浏览 • 1回复 待解决
在Redis的使用中,大Key会给Redis带来哪些常见的的问题?
2585浏览 • 1回复 待解决
HarmonyOS 带有星球点的标签云如何实现
279浏览 • 1回复 待解决
HarmonyOS 使用foreach后页面未重新渲染?
421浏览 • 1回复 待解决
如何使用redisson客户端获取redis集群中key的值 ?
3243浏览 • 1回复 待解决
redis和mq的发布订阅是tcp的长连接,消费者会阻塞吗?
2300浏览 • 1回复 待解决
使用monitor命令对Redis的哪些资源产生占用?
2884浏览 • 1回复 待解决
我最近遇到了同样的问题。而且我相信您正在像我一样从顶点文档中粘贴官方建议的重新连接代码:
我可以验证你的情况,我在 vertx-redis-client #issue 375 与复制者一起打开了一个问题
当我找到解决方案时,维护人员还没有回复我 - 使用
而不是
像:
当redis服务器出现网络问题或者redis服务器暂时做的很短的时候,这个非常有效。
在
中调用:
也需要同时声明以处理vertx redis客户端#issue 227中描述的情况
我认为官方文档可能需要一些改进。