在中高负载(测试和生产)下,使用 Vert.x Redis 客户端时,我在数百个请求后收到以下警告。
2019-11-22 11:30:02.320 [vert.x-eventloop-thread-1] WARN io.vertx.redis.client.impl.RedisClient - No handler waiting for message: [null, 400992, <data from redis>]
因此,提供给 Redis 调用(见下文)的处理程序不会被调用,并且传入的请求会超时。
Handler<AsyncResult<String>> handler = res -> {
// success handler
};
redis.get(key, res -> {
handler.handle(res);
});
真正的问题是,一旦出现“No handler ...”警告,Redis 客户端就变得毫无用处,因为通过客户端对 Redis 的所有进一步调用都会失败,并出现相同的警告,导致处理程序没有被调用。我在客户端上设置了一个异常处理程序来尝试重新连接,但我没有看到任何正在尝试的重新连接。
如何从这个问题中恢复过来?任何减轻严重性的变通方法也很好。
我在 vertx-core 和 vertx-redis-client 3.8.1 。