使用 AWS-SQS SDK 重复调用 ReceiveMessage 方法 Java

Duplicate call ReceiveMessage method with AWS-SQS SDK Java

我尝试使用 AWS-SDK 实现自定义 SqsListener Java 但他不关心 withWaitTimeSeconds。

当我开始这段代码时:

@Scheduled(fixedDelay = 100)
@Transactional
public void testSQS() {

    try {

        String fifoQueueUrl = "example_stack.fifo";

        ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(fifoQueueUrl)
                .withWaitTimeSeconds(10)
                .withMaxNumberOfMessages(10);


        logger.info("START=" + LocalDateTime.now().toString());
        List<Message> sqsMessages = amazonSQS.receiveMessage(receiveMessageRequest).getMessages();
        logger.info("END=" + LocalDateTime.now().toString());

        if (CollectionUtils.isEmpty(sqsMessages)) {
            logger.info("empty");

        }

    } catch (Exception e) {
        logger.error("Error.", e);
    }
}

第一次调用需要 10 秒,因为我将 WaitTimeSeconds 配置为 10 秒。 所以我的问题是,为什么在我第一次调用 receiveMessage() 之后,它不会每次都等待 10 秒?

查看日志,您会看到他等待 10 秒然后重试,并且 return 空的消息列表没有等待。

查看日志:

2019-02-08 10:05:42 - START=2019-02-08T15:05:42.859
2019-02-08 10:06:03 - END=2019-02-08T15:06:03.119
2019-02-08 10:06:03 - empty

Seconde Time:

2019-02-08 10:06:03 - START=2019-02-08T15:06:03.223    
2019-02-08 10:06:23 - END=2019-02-08T15:06:23.181
2019-02-08 10:06:23 - empty
2019-02-08 10:06:23 - START=2019-02-08T15:06:23.284
2019-02-08 10:06:23 - END=2019-02-08T15:06:23.422
2019-02-08 10:06:23 - empty


3th time

2019-02-08 10:06:23 - START=2019-02-08T15:06:23.525
2019-02-08 10:06:43 - END=2019-02-08T15:06:43.255
2019-02-08 10:06:43 - empty
2019-02-08 10:06:43 - START=2019-02-08T15:06:43.358
2019-02-08 10:06:43 - END=2019-02-08T15:06:43.454
2019-02-08 10:06:43 - empty
2019-02-08 10:06:43 - START=2019-02-08T15:06:43.557
2019-02-08 10:06:43 - END=2019-02-08T15:06:43.557
2019-02-08 10:06:43 - empty
2019-02-08 10:06:43 - START=2019-02-08T15:06:43.659
2019-02-08 10:06:43 - END=2019-02-08T15:06:43.709
2019-02-08 10:06:43 - empty
2019-02-08 10:06:43 - START=2019-02-08T15:06:43.813
2019-02-08 10:07:03 - END=2019-02-08T15:07:03.354
2019-02-08 10:07:03 - empty
2019-02-08 10:07:03 - START=2019-02-08T15:07:03.455
2019-02-08 10:07:03 - END=2019-02-08T15:07:03.546
2019-02-08 10:07:03 - empty
2019-02-08 10:07:03 - START=2019-02-08T15:07:03.649
2019-02-08 10:07:03 - END=2019-02-08T15:07:03.650
2019-02-08 10:07:03 - empty
2019-02-08 10:07:03 - START=2019-02-08T15:07:03.755
2019-02-08 10:07:03 - END=2019-02-08T15:07:03.756
2019-02-08 10:07:03 - empty
2019-02-08 10:07:03 - START=2019-02-08T15:07:03.859
2019-02-08 10:07:03 - END=2019-02-08T15:07:03.860
2019-02-08 10:07:03 - empty
2019-02-08 10:07:03 - START=2019-02-08T15:07:03.963
2019-02-08 10:07:03 - END=2019-02-08T15:07:03.963
2019-02-08 10:07:03 - empty
2019-02-08 10:07:04 - START=2019-02-08T15:07:04.067
2019-02-08 10:07:04 - END=2019-02-08T15:07:04.067
2019-02-08 10:07:04 - empty
2019-02-08 10:07:04 - START=2019-02-08T15:07:04.169
2019-02-08 10:07:04 - END=2019-02-08T15:07:04.169

版本 -> AWS-SDK 1.11.125

我发现了问题。它与具有 spring-cloud-aws-messaging 依赖性的 AmazonSQSAsyncClient 冲突。

如果我创建自己的 AmazonSQS 客户端 bean,它可以正常工作。