SQS中用户消息的并发处理



我们有几个消费者流程,它们从标准SQS进行轮询并处理消息。每条消息都与一个用户相关联。对于每个用户,我们每分钟可以处理100条消息。除此之外,我们用于处理的API将开始给出500个错误。

现在,由于队列中包含其他用户的消息,我们无法挑选这些用户,因为他们的配额低于限制。

对此的一个解决方案是使用FIFO并实现消息组。但是先进先出有一个特殊的限制。

您最多可以有20000条飞行中的消息

这本来是完全可以的,但问题是,当一条消息从一个消息组传播时,SQS会将该组中所有消息的计数添加到传播中计数中。

这篇文章更详细地解释了:

https://tomgregory.com/3-surprising-facts-about-aws-sqs-fifo-queues/#:~:text=A%20FIFO%20队列%20具有%20a%20最大值%20空中%20消息%20限制%20%2020%2C000。

在这篇文章中,阅读">20000消息缓冲区";头球这也许可以解释发生了什么。

https://aws.amazon.com/premiumsupport/knowledge-center/sqs-message-backlog/

我能想到的第二个解决方案是让微服务的生产者变得智能。但在我们的案例中,生产者是一个完全不同的微服务。而微服务的所有者几乎听不进去。

我们当然希望我们的消费者能够扩大规模,为每个用户提供最短的等待时间,但由于上述原因,我们做不到。

我真的觉得SQS不是这个设计的正确选择,但无法说服我的上级。

我们有办法克服这种情况吗?还是走到了死胡同?

这本来是完全可以的,但问题是当消息来自消息组,SQS将所有消息的计数相加该组中发送给飞行中计数的消息

我不认为FIFO是这种情况。我使用的是FIFO,每个消费者一次处理一条消息(共有3条(。有来自同一消息组的SQS消息,但对我来说,机上消息计数总是3,即3个消费者中的每一个都处理其中一个。当它们中的任何一个处理消息,并且每个SQS消息的处理时间在这里是可变的时,它会拾取队列中的下一个消息。机上信息计数始终保持为3。

相关内容

  • 没有找到相关文章

最新更新