Я пытаюсь связать некоторый код Java с очередью SQS, которую я создал на AWS. Я начал с написания теста, чтобы получить желаемое поведение (например, писать и получать сообщения), и, похоже, он ведет себя очень странно. Вот мой тестовый код:
@Test
public void testMessagesAreSentToQueue() {
sqs.sendMessage(queueUrl, "TEST MESSAGE1");
sqs.sendMessage(queueUrl, "TEST MESSAGE2");
sqs.sendMessage(queueUrl, "TEST MESSAGE3");
ReceiveMessageRequest req = new ReceiveMessageRequest().withQueueUrl(queueUrl).withWaitTimeSeconds(20);
List<Message> messagesInQueue = sqs.receiveMessage(req).getMessages();
assertThat(messagesInQueue.size()).isEqualTo(3);
assertThat(messagesInQueue.get(0).getBody()).isEqualTo("TEST MESSAGE1");
assertThat(messagesInQueue.get(1).getBody()).isEqualTo("TEST MESSAGE2");
assertThat(messagesInQueue.get(2).getBody()).isEqualTo("TEST MESSAGE3");
}
Теперь, если я закомментирую сообщения 2 и 3 и утверждаю, что возвращается только одно сообщение, тест проходит. Но когда я отправляю более одного сообщения, тест терпит неудачу, говоря, что размер messagesInQueue
равен 1. Кажется, что независимо от того, сколько сообщений я отправляю с помощью sendMessage
, я всегда получаю только одно сообщение обратно в receiveMessage().getMessages()
.
Я неправильно понимаю, как здесь работает SQS? Я ожидаю, что смогу отправлять и получать обратно любое количество сообщений, которые захочу.
EDIT — я использую maxNumberOfMessages и повторяю длинные запросы опроса, пока очередь не будет опустошена (подробнее об этом здесь — Amazon SQS Long Polling не возвращает все сообщения)