¿Por qué los mensajes SqS a veces permanecen en vuelo en la cola?

Estoy usando las colas de Amazon SQS de una manera muy simple. Por lo general, los mensajes se escriben y se ven y se leen inmediatamente. Ocasionalmente, un mensaje se escribe y permanece en vuelo (no visible) en la cola durante varios minutos. Puedo verlo desde la consola. El tiempo de espera del mensaje de recepción es 0 y la visibilidad predeterminada es de 5 segundos. Permanecerá así durante varios minutos o hasta que se escriba un nuevo mensaje que de alguna manera lo libere. Un retraso de unos segundos está bien, pero más de 60 segundos no está bien.

Hay 8 hilos de lectura que son siempre largos, por lo que no es que algo no esté intentando leerlo, lo son.

Editar : Para ser claros, ninguna de las lecturas del consumidor está devolviendo mensajes y sucede independientemente de si la consola está abierta o no. En este escenario, solo hay un mensaje involucrado, y solo está sentado en la cola invisible para los consumidores.

¿Alguien más ha visto este comportamiento y qué puedo hacer para mejorarlo?

Aquí está el SDK para Java que estoy usando:

<dependency>
  <groupId>com.amazonaws</groupId>
  <artifactId>aws-java-sdk</artifactId>
  <version>1.5.2</version>
</dependency>     

Aquí está el código que hace la lectura (max = 10, maxwait = 0 configuración de inicio):

void read(MessageConsumer consumer) {

  List<Message> messages = read(max, maxWait);

  for (Message message : messages) {
    if (tryConsume(consumer, message)) {
      delete(message.getReceiptHandle());
    }
  }
}

private List<Message> read(int max, int maxWait) {

  AmazonSQS sqs = getClient();
  ReceiveMessageRequest rq = new ReceiveMessageRequest(queueUrl);
  rq.setMaxNumberOfMessages(max);
  rq.setWaitTimeSeconds(maxWait);
  List<Message> messages = sqs.receiveMessage(rq).getMessages();

  if (messages.size() > 0) {
    LOG.info("read {} messages from SQS queue",messages.size());
  }

  return messages;
}

La línea de registro para "leer ..." nunca aparece cuando esto está sucediendo, y es lo que hace que entre con la consola y vea si el mensaje está allí o no, y lo está.

Respuestas a la pregunta(2)

Su respuesta a la pregunta