在中高负载(测试和生产)时,当使用Vert. x Redis客户端时,我在几百个请求后会收到以下警告。
2019-11-22 11:30:02.320WARNio.vertx.redis.client.impl.RedisClient-没有处理程序等待消息:[null,400992,
因此,提供给Redis调用(见下文)的处理程序不会被调用,传入的请求超时。
Handler<AsyncResult<String>> handler = res -> {
// success handler
};
redis.get(key, res -> {
handler.handle(res);
});
真正的问题是,一旦“没有处理程序…”出现警告时,Redis客户端将变得无用,因为通过客户端对Redis进行的所有进一步调用都会失败,并出现相同的警告,导致处理程序未被调用。我在客户端上设置了一个异常处理程序来尝试重新连接,但我没有看到任何试图重新连接的情况。
怎样才能从这个问题中恢复过来?任何缓解这种严重性的变通方法都是很好的。
我使用的是vertx core和vertx redis客户端3.8.1。
即将发布的4.0版本已经解决了这个问题,应该很快就会发布一个版本,我真的说不出会有多快。
问题是,我们不能轻易地从主分支移植回3.8分支,因为客户机上发生了重大重构,代码库非常不同。
新代码使用了一个连接池,并经过了并发访问测试(这就是您看到的问题的根源)。在负载不足的情况下,请求会在所有事件循环中路由,而在非常特殊的情况下,维护飞行中请求(发送到redis的请求)和等待处理程序之间状态的队列将失去同步。
因此,我首先尝试看看您是否已经可以开始将代码移动到4.0,您可以尝试使用4.0.0-milestone3
版本,但为了完全正确,只需使用最新的master
运行,它在这方面解决了更多问题。
版本 维特。x核心:3.5.0 vert. x redis客户端:3.5.0 上下文 2018-06-02 17:40:55.981错误4933---[ntlop-thread-2]io.vertx.redis.impl.重新连接:没有处理程序等待消息:14751915 2018-06-02 17:41:10.937错误4933---[ntloop-thread-2]io。维特斯。雷迪斯。impl
我有以下兔子听者: 我需要将listener配置为在它处理一条消息后等待15分钟,然后再接收下一条消息。不需要在此方法中等待。我所需要的只是在处理完一条后不接收任何消息。可以通过来完成,但我不确定这是否是实现这一点的最佳方法。对于这种情况有没有rabbitmq的配置?
对于从Spring Boot API发送的每个查询,我都会收到以下警告消息,并希望将其从日志中删除。 我正在使用RestHighLevelClient。根据Elasticsearch的说法,这可以通过迁移到他们最近推出的Elasticsearch Java API客户端来解决。然而,这将需要很长时间才能让我们做出这样的改变。 Elasticsearch版本是7.14.1,不幸的是,我们无法升级它。
问题内容: 在运行存储过程时,该过程可能会引发警告消息。 有什么办法可以在Golang中使用Postgresql驱动程序(https://github.com/lib/pq)获取这些消息? 问题答案: 答案似乎是否定的。 在我的测试中,Postgres服务器似乎没有发送警告和结果。即使这样做,返回错误以及sql.Result充其量也将造成混乱,并且需要进行修改。在函数 中 引发错误 确实 返回了错
我的代码仍在工作,我可以发送消息并等待消息发送完毕。发送消息的持续时间大约为10秒,这对我不好,因为我的程序需要1秒的间隔才能发送下一条消息。看看以澄清问题。 msg4- msg4、msg3和msg2仍在等待,直到msg1发送/失败。 这是代码sendMessage.java 在我看来。java类 第一条消息已成功发送,但第二条消息等未发送。如何使这些等待直到发送第一条消息?
C:\Users\Admin\anaconda3\lib\site packages\ipykernel\u启动器。py:7:SettingWithCopyWarning:试图在数据帧切片的副本上设置值 请参阅留档中的注意事项:https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view