Версия
vert.x core: 3.5.0
vert.x Redis клиент: 3.5.0
Context
2018-06-02 17: 40: 55.981 ОШИБКА 4933 --- [ntloop-thread-2] io.vertx.redis.impl.RedisConnection: обработчик не ожидает сообщения: 14751915
2018-06-02 17: 41: 10.937 ОШИБКА 4933 --- [ntloop-thread-2] io.vertx.redis.impl.RedisConnection: обработчик не ожидает сообщения: false
2018-06-02 17: 41: 10.947 ОШИБКА 4933 --- [ntloop-thread-2] io.vertx.redis.impl.RedisConnection: обработчик не ожидает сообщения: false
2018-06-02 17:41: 20.937 ОШИБКА 4933 --- [ntloop-thread-2] io.vertx.redis.impl.RedisConnection: обработчик не ожидает сообщения: true
2018-06-02 17: 41: 30.937 ОШИБКА 4933--- [ntloop-thread-2] io.vertx.redis.impl.RedisConnection: обработчик не ожидает сообщения: true
2018-06-02 17: 41: 35.927 ОШИБКА 4933 --- [ntloop-thread-2] io.vertx.redis.impl.RedisConnection: обработчик не ожидает сообщения: false
2018-06-02 17: 41: 40.937 ОШИБКА 4933 --- [ntloop-thread-2] io.vertx.redis.impl.RedisConnection: обработчик не ожидает сообщения: true
2018-06-02 17: 41: 50.948 ОШИБКА 4933 --- [ntloop-thread-2] io.vertx.redis.impl.RedisConnection: обработчик не ожидает сообщения: true
после просмотракод io.vertx.redis.impl.RedisConnectioni найти причину:
Когда сервер запущен, создайте соединение Redis, все в порядке для запуска.
Через длительное время (например, дни) состояние соединения ОТКЛЮЧЕНО.Redis клиент Vert.x переподключает сервер redis при отправке команды на сервер redis:
void send(final Command command) {
// start the handshake if not connected
if (state.get() == State.DISCONNECTED) {
connect();
}
connect () вызов clearQueue ()
clearQueue (): ожидание команды ожидания будет пустым.
Call handleReply() при получении с сервера redis с новым подключением.
примечание: здесь отображается журнал ошибок (третья строка внизу).
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));
}
}
вопрос:
Это ошибка или нет?Если это не ошибка, команды post будут отброшены при повторном подключении сервера redis.
Какой хороший способ справиться с этой ситуацией?