AWS SQS 轮询

问题描述 投票:0回答:1

我不明白需要直接在队列上配置短轮询和长轮询。 假设我创建了一个 sqs 队列,我想用 java 每小时检查一次队列中的消息。 然后我只需要创建一个用 @Scheduled(fixedRate = 3600000) 注释的方法,并在该方法中调用 sqsClient.receiveMessage 即可。 如果我想要短轮询,那么我可以减少固定速率,例如每 5 秒调用一次我的方法。

我已经读过:

waitTimeSeconds():调用等待的持续时间(以秒为单位) 消息在返回之前到达队列。

传递 waitTimeSeconds 值(最多 20 秒)时, 当队列中没有可用消息时,调用将阻塞。 但是,如果有一条消息(或者在这段时间内有一条消息) 期间),它将立即返回消息。

这是什么,我的轮询配置中带有 @Scheduled 的另一个轮询配置?我不明白。而且最大值是 20 秒,我真的不需要那么频繁地检查我的队列。 那么我是否只需将接收消息等待时间设置为 1,以便获得长轮询的特殊性(检查所有服务器的消息)并忽略它的存在,因为我不需要它? 它的用途是什么?

java spring amazon-web-services spring-boot amazon-sqs
1个回答
0
投票

如果您的要求是每小时检查一次消息,那么

waitTimeSeconds()
与您不相关

它通常用于持续需要消息的大容量情况。为此,编写了一个不断轮询队列的“消费者”。为了最大限度地减少呼叫次数,可以指定最长 20 秒的等待时间。

通过指定等待时间,它表示:“如果队列中没有消息,请等待 20 秒,然后再对此 API 调用提供响应。但是,如果消息可用,请立即返回。”

该用例适用于希望在消息进入队列时快速响应的系统。

© www.soinside.com 2019 - 2024. All rights reserved.