Amazon SQS - FIFO队列消息请求,不一致接收

时间:2017-07-04 11:19:11

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

我有一个FIFO SQS队列,可见时间为30秒。 要求是尽可能快地读取消息并清除队列。

我在JAVA中的代码如下所示(这只是一个想法的代表,而不是完整的代码):

//keep getting messages from FIFO and process them ASAP
while(true)
{
     List<Message> messages = 
     sqsclient.receiveMessage(receiveMessageRequest).getMessages();
    //my logic/code here to process these messages and delete them ASAP
}

在收到消息后的while循环中,它们将被处理并从队列中删除。 但是,很多次,receiveMessageRequest不会给我消息(返回零消息)。

此外,在从SQS接收期间,消息限制一次只有10个,这已经是一个问题,但由于这些零接收,队列正在堆积。

我不知道为什么会这样。文档在这一部分中是不是很清楚(或者我是否在队列配置方面缺失了?)

请帮忙!

注意: 1.我的FIFO队列在这种情况下总是有消息,因此不存在Queue零消息和接收请求返回零的情况

2。处理和删除时间也小于可见性超时。

感谢。

更新 我已经开始运行多个使用者来处理FIFO队列。显然,一个消费者没有应对消息的流入。我将在几天内更新多个消费者的表现。感谢

1 个答案:

答案 0 :(得分:1)

您必须首先确保在VisibilityTimeout中删除收到的所有邮件。如果您使用DeleteMessageBatch进行删除,请确保删除所有10条消息。

另外,当您将邮件排入队列时,如何对邮件进行排队? 仅在单个消息组中保证消息顺序。 这也意味着,如果为所有消息设置相同的组ID,则仅限于一个消费者,以便确保保留消息的顺序。即使使用多个使用者,在可见性超时到期之前,属于同一组的所有邮件对其他使用者都是不可见的。