当前位置: 首页 > 知识库问答 >
问题:

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

卜弘文
2023-03-14

我有一个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在这种情况下总是有消息,所以不存在Queue有零消息而接收请求返回零的情况

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

谢谢

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

共有1个答案

邹祺
2023-03-14

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

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

 类似资料:
  • 因此,我使用Spring integration链接JMS和ActiveMQ,如下所示:- 如何使其工作,以便发送到此队列并从中接收消息?请帮忙。

  • 我试图写一个请求从我的服务器获取消息在使用签名,消息看起来像这样, POST/134148934511/Localhost/?Action=ReceiveMessage 但我收到了一条错误消息(尽管我拥有所需的权限)。(我确信aws版本4的签名过程是正确的(通过S3检查))我做错了什么?

  • 我试图用SQS FIFO队列探索SNS FIFO主题,这就是我刚才尝试的。我创建了SNS FIFO主题和SQS FIFO队列,并将FIFO队列订阅到FIFO主题。根据文档,对于上述设置,每当我们将消息发布到SNS FIFO队列时,它都应该将该消息扇出到SQS队列,但它没有发生。我能够获得PublishResult#getMessageId()表示发布部分正在成功进行,但队列中没有任何消息。由于SN

  • (如这张图所示,我有5条消息可用,但我只能收到2条消息。) 我试图删除收到的两条消息中的一条,然后再次轮询。删除的没有了,我收到了新的消息。但总共还是2条消息。

  • 解决方案#3:使用AWS SQS标准队列和AWS ElasticCache(Redis或Memcached)。对于每条消息,“messageID”字段将保存在缓存服务器中,并在以后检查是否重复。存在意味着此消息已被处理。(顺便说一下,“MessageID”在缓存服务器中应该存在多长时间。AWS SQS文档没有提到消息可以重复到多长时间。)

  • 我们最近将应用程序从 Weblogic 迁移到了 JBOSS Fuse。作为此迁移的一部分,我们还必须将 JMS 实现更改为 Active MQ。由于某些约束,将请求发送到旧 Weblogic JMS 队列的客户端将无法进行更改以将请求发送到新的活动 MQ。有没有办法保持客户端不变(仅更改主机和端口以指向新服务器)并接收发送到Weblogic JMS队列的消息(当然没有weblogic服务器)并将