版本
维特。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。重新连接:没有处理程序等待消息:false
2018-06-02 17:41:10.947错误4933---[ntlop-thread-2]io.vertx.redis.impl.重新连接:没有处理程序等待消息:false
2018-06-02 17:41:20.937错误4933---[ntloop-thread-2]io。维特斯。雷迪斯。impl。重新连接:没有处理程序等待消息:true
2018-06-02 17:41:30.937错误4933---[ntloop-thread-2]io。维特斯。雷迪斯。impl。重新连接:没有处理程序等待消息:true
2018-06-02 17:41:35.927错误4933---[ntloop-thread-2]io。维特斯。雷迪斯。impl。重新连接:没有处理程序等待消息:false
2018-06-02 17:41:40.937错误4933---[ntlop-thread-2]io.vertx.redis.impl.重新连接:没有处理程序等待消息:true
2018-06-02 17:41:50.948错误4933---[ntloop-thread-2]io。维特斯。雷迪斯。impl。重新连接:没有处理程序等待消息:true
io的后视图代码。维特斯。雷迪斯。impl。我们无法找到原因:
>
当服务器启动时,创建redis连接,就可以运行了。
长时间(如几天)后,连接状态断开。维特。x redis客户端在向redis服务器发送命令时重新连接redis服务器:
void send(final Command command) { // start the handshake if not connected if (state.get() == State.DISCONNECTED) { connect(); }
connect()调用clearQueue()
clearQueue():等待命令quene将为空。
当收到来自redis服务器的新连接时,调用handleReply()。
注意:此处会出现错误日志(底部第三行)。
private void handleReply(Reply reply) { final Command cmd = waiting.poll(); if (cmd != null) { switch (reply.type()) { case '-': // Error cmd.handle(Future.failedFuture(reply.asType(String.class))); return; case '+': // Status switch (cmd.responseTransform()) { case ARRAY: cmd.handle(Future.succeededFuture(new JsonArray().add(reply.asType(String.class)))); break; default: cmd.handle(Future.succeededFuture(reply.asType(cmd.returnType()))); break; } return; case '$': // Bulk switch (cmd.responseTransform()) { case ARRAY: cmd.handle(Future.succeededFuture(new JsonArray().add(reply.asType(String.class, cmd.encoding())))); break; case INFO: String info = reply.asType(String.class, cmd.encoding()); if (info == null) { cmd.handle(Future.succeededFuture(null)); } else { String lines[] = info.split("\\r?\\n"); JsonObject value = new JsonObject(); JsonObject section = null; for (String line : lines) { if (line.length() == 0) { // end of section section = null; continue; } if (line.charAt(0) == '#') { // begin section section = new JsonObject(); // create a sub key with the section name value.put(line.substring(2).toLowerCase(), section); } else { // entry in section int split = line.indexOf(':'); if (section == null) { value.put(line.substring(0, split), line.substring(split + 1)); } else { section.put(line.substring(0, split), line.substring(split + 1)); } } } cmd.handle(Future.succeededFuture(value)); } break; default: cmd.handle(Future.succeededFuture(reply.asType(cmd.returnType(), cmd.encoding()))); break; } return; case '*': // Multi switch (cmd.responseTransform()) { case HASH: cmd.handle(Future.succeededFuture(reply.asType(JsonObject.class, cmd.encoding()))); break; default: cmd.handle(Future.succeededFuture(reply.asType(JsonArray.class, cmd.encoding()))); break; } return; case ':': // Integer switch (cmd.responseTransform()) { case ARRAY: cmd.handle(Future.succeededFuture(new JsonArray().add(reply.asType(Long.class)))); break; default: cmd.handle(Future.succeededFuture(reply.asType(cmd.returnType()))); break; } return; default: cmd.handle(Future.failedFuture("Unknown message type")); } } else { // **An error log appears here** log.error("No handler waiting for message: " + reply.asType(String.class)); } }
问题:
是不是虫子?如果不是错误,重新连接redis服务器时,post命令将被丢弃。
处理这种情况的好方法是什么?
问题已解决,出现上述问题的原因是连接已被重用,尚未关闭,解决方法是:'
RedisClient redisClient = RedisClient.create(this.vertx, redisOptions);
//do some thing;
redisClient.close(h-{})...
`每节课。
我有以下兔子听者: 我需要将listener配置为在它处理一条消息后等待15分钟,然后再接收下一条消息。不需要在此方法中等待。我所需要的只是在处理完一条后不接收任何消息。可以通过来完成,但我不确定这是否是实现这一点的最佳方法。对于这种情况有没有rabbitmq的配置?
我正在使用hiredis C库连接到redis服务器。我不知道在订阅新消息后如何等待新消息。 我的代码如下所示: 现在如何告诉雇佣者在频道上等待消息?
我的代码仍在工作,我可以发送消息并等待消息发送完毕。发送消息的持续时间大约为10秒,这对我不好,因为我的程序需要1秒的间隔才能发送下一条消息。看看以澄清问题。 msg4- msg4、msg3和msg2仍在等待,直到msg1发送/失败。 这是代码sendMessage.java 在我看来。java类 第一条消息已成功发送,但第二条消息等未发送。如何使这些等待直到发送第一条消息?
我正在构建一个应用程序,其中微服务通过RabbitMQ(请求-响应模式)进行通信 一切正常,但我仍然有一个错误“远程服务中没有定义匹配的消息处理程序。”- 当我向客户端应用程序发送帖子时,它只需通过客户端(ClientProxy)发送包含数据的消息,消费者应用程序就会响应。此功能实际上可以工作,但始终只能第二次使用。我知道这听起来很奇怪,但在我的第一个POST请求中,总是有来自客户的错误,我的每一
问题内容: 我正在使用hiredis C库连接到redis服务器。我无法弄清楚订阅新消息后如何等待新消息。 我的代码如下所示: 现在如何告诉hiredis在频道上等待消息? 问题答案: 您无需告诉hiredis您需要在通道上等待:事件循环将仅在先前已注册的Redis连接上等待。 这是一个完整的示例: 您可以通过使用以下命令发布内容来对其进行测试: event_base_dispatch函数是实际启
我试图通过使用Jms Qpid客户端的Spring Boot应用程序使用Apache Qpid。我可以对其进行配置,但当我尝试从队列接收消息时,记录器正在打印: 这是我的代码: JMS配置。Java语言 应用属性 schduledTask.java它只是按间隔运行发送和接收消息。