我有一个需求,需要在1次读取中读取我的Amazon SQS队列中的所有消息,然后根据创建时间戳对其进行排序并执行业务逻辑。
为了确保检查所有SQS主机的消息,我启用了长轮询。 我的做法是将队列的默认等待时间设置为10秒钟。(任何大于0的值都将启用长轮询)。
然而,当我尝试读取队列时,它仍然没有给我所有的消息,我不得不多次读取才能获得所有的消息。 我甚至通过每个接收请求的代码启用了长轮询,但仍然无效。 以下是我使用的代码。
AmazonSQSClient sqsClient = new AmazonSQSClient(new ClasspathPropertiesFileCredentialsProvider());
sqsClient.setEndpoint("sqs.us-west-1.amazonaws.com");
String queueUrl = "https://sqs.us-west-1.amazonaws.com/12345/queueName";
ReceiveMessageRequest receiveRequest = new ReceiveMessageRequest().withQueueUrl(queueUrl).withMaxNumberOfMessages(10).withWaitTimeSeconds(20);
List<Message> messages = sqsClient.receiveMessage(receiveRequest).getMessages();
我的队列中有3条消息,每次运行代码时结果都不同,有时我会收到全部3条消息,有时只有1条。我将可见超时设置为2秒,仅为了排除消息在读取时变为不可见的原因。 这是短轮询的预期行为。长轮询应该消除多次轮询。我在这里做错了什么吗?
谢谢