[英]Amazon SQS queue send/receive unexpected behaviour with Java SDK - what am I doing wrong?
我正在嘗試將一些Java代碼與我在AWS上制作的SQS隊列連接起來。 我開始寫一個測試來獲得我想要的行為(即編寫和接收消息),它似乎表現得非常奇怪。 這是我的測試代碼:
@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()
返回一條消息receiveMessage().getMessages()
。
我誤解了SQS在這里工作的方式嗎? 我希望能夠發送和接收我想要的任何數量的消息。
編輯 - 我正在使用maxNumberOfMessages並重復長輪詢請求,直到隊列耗盡(更多關於此處 - 亞馬遜SQS長輪詢不返回所有消息 )
查看ReceiveMessageRequest的API文檔,看起來默認情況下每次調用最多檢索一條消息。 使用new ReceiveMessageRequest().withMaxNumberOfMessages(3)
增加此數字可能會解決您的問題,但它仍可能無法正常工作,因為文檔還說明:
如果隊列中的消息數量很少(小於1000),則可能會獲得比每次ReceiveMessage調用請求的消息少的消息。 如果隊列中的消息數量非常小,您可能不會在特定的ReceiveMessage響應中收到任何消息; 在這種情況下,您應該重復該請求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.