【问题标题】:How to force ApproximateReceiveCount to be 1?如何强制 ApproximateReceiveCount 为 1?
【发布时间】:2025-12-12 02:05:01
【问题描述】:

我在 java spring boot 项目中使用 SQS,方式如下:

@Bean
    public SimpleMessageListenerContainerFactory simpleMessageListenerContainerFactory(AmazonSQSAsync amazonSqs) {
        SimpleMessageListenerContainerFactory factory = new SimpleMessageListenerContainerFactory();
        factory.setAmazonSqs(amazonSqs);
        factory.setMaxNumberOfMessages(1);
        factory.setWaitTimeOut(20);
        return factory;
    }

我得到无序数据并检查了SimpleMessageListenerContainer 日志,似乎当ApproximateReceiveCount = 2 得到无序数据时。我认为通过设置 factory.setMaxNumberOfMessages(1); 我只会收到 1 条消息,然后 ApproximateReceiveCount = 2 是不可能的,它的值只会是 1。有没有办法强制 ApproximateReceiveCount 为 1?我可以通过设置setMaxNumberOfMessages 来做到这一点,还是应该以不同的方式做到这一点?

任何建议将不胜感激!

【问题讨论】:

    标签: java amazon-web-services spring-boot amazon-sqs


    【解决方案1】:

    您使用的是 FIFO 队列吗?

    默认情况下,标准 SQS 队列是无序的,因此您无法影响应用程序中的消息顺序。

    创建一个 FIFO 队列,看看是否仍然收到无序消息。

    https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues.html

    【讨论】: