簡體   English   中英

Amazon SQS隊列使用Java SDK發送/接收意外行為 - 我做錯了什么?

[英]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長輪詢不返回所有消息

查看ReceiveMessageRequestAPI文檔,看起來默認情況下每次調用最多檢索一條消息。 使用new ReceiveMessageRequest().withMaxNumberOfMessages(3)增加此數字可能會解決您的問題,但它仍可能無法正常工作,因為文檔還說明:

如果隊列中的消息數量很少(小於1000),則可能會獲得比每次ReceiveMessage調用請求的消息少的消息。 如果隊列中的消息數量非常小,您可能不會在特定的ReceiveMessage響應中收到任何消息; 在這種情況下,您應該重復該請求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM