gpt4 book ai didi

java - 如何从 "No handler waiting for message"警告中恢复客户端?

转载 作者:行者123 更新时间:2023-11-30 01:43:33 25 4
gpt4 key购买 nike

在中高负载(测试和生产)下,使用 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 。

最佳答案

即将发布的 4.0 版本已经解决了这个问题,并且应该很快就会发布,具体要多久,我真的不知道。

问题是我们无法轻松地从 master 分支移植回 3.8 分支,因为客户端发生了重大重构,并且代码库非常不同。

新代码使用连接池,并且已经过并发访问测试(这就是您所看到的问题的来源)。在负载下,请求会跨所有事件循环进行路由,并且维护飞行中请求(发送到 Redis 的请求)和等待处理程序之间状态的队列在非常特殊的条件下会不同步。

所以我首先尝试看看您是否可以开始将代码移至 4.0,您可以尝试使用 4.0.0-milestone3 版本,但要完全没问题,只需使用最新的 master 运行,该版本在该领域解决了更多问题。

关于java - 如何从 "No handler waiting for message"警告中恢复客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59051347/

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