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

时间:2019-02-08 15:26:05

标签: java spring-boot task amazon-sqs

我尝试使用AWS-SDK Java实现自定义SqsListener,但他不关心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秒钟,然后重试并返回空的邮件列表,而无需等待。

请参阅日志:

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

1 个答案:

答案 0 :(得分:0)

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

如果我创建自己的运行良好的AmazonSQS客户端bean。