Dlaczego wiadomości SqS ​​czasami pozostają w locie w kolejce

Używam kolejek Amazon SQS w bardzo prosty sposób. Zazwyczaj wiadomości są pisane i natychmiast widoczne i odczytywane. Czasami wiadomość jest zapisywana i pozostaje w locie (niewidoczne) w kolejce przez kilka minut. Widzę to z konsoli. Czas oczekiwania na otrzymanie wiadomości wynosi 0, a domyślna widoczność to 5 sekund. Pozostanie w ten sposób przez kilka minut, lub dopóki nie zostanie napisana nowa wiadomość, która w jakiś sposób ją uwalnia. Kilka sekund opóźnienia jest w porządku, ale ponad 60 sekund nie jest w porządku.

Istnieje 8 wątków czytających, które zawsze odpytują, więc nie chodzi o to, że coś nie próbuje ich odczytać, są.

Edytować : Żeby było jasne, żaden z odczytów konsumenckich w ogóle nie zwraca żadnych wiadomości i dzieje się to niezależnie od tego, czy konsola jest otwarta. W tym scenariuszu zaangażowana jest tylko jedna wiadomość, która po prostu siedzi w kolejce niewidoczna dla konsumentów.

Czy ktoś widział to zachowanie i co mogę zrobić, aby to poprawić?

Oto sdk dla java, którego używam:

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

Oto kod, który wykonuje odczyt (max = 10, maxwait = 0 startup config):

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;
}

Wiersz dziennika „czytaj ..” nigdy nie pojawia się, gdy to się dzieje, i to, co powoduje, że wchodzę z konsolą i sprawdzam, czy wiadomość jest, czy nie, i tak jest.

questionAnswers(2)

yourAnswerToTheQuestion