从FIFO队列并发执行

0

【以下的问题经过翻译处理】 我的FIFO队列与Lambda函数连接。当消息发送到队列时,函数会接收并处理它。但是,当多个消息发送到队列时,我的问题就出现了:我理解FIFO队列基本上是一个一个处理所有消息(如果它们共享相同的GroupID)。但对我来说,当我在几秒钟内向队列发送多个消息(例如5个)时,第一个消息在启动时,其他消息都在等待,但是当第一个消息处理完成后,其他4个消息一起启动了!!如果它们共享相同的GroupID,而且是FIFO队列,这怎么会发生呢?我期望的是当第一个消息处理完成后,第二个消息才会启动,其他3个消息等待,以此类推!

我觉得这不取决于队列设置,因为我已经多次更改了所有参数(可见超时时间,基于内容的去重等)。无论如何,我现在会将参数设置的截图留给你们。

我的账户最多同时执行10个任务,这恰好是最多同时执行的消息数量(我试图发送很多消息,结果是第一个消息单独执行,然后十个或十个以下的所有其他任务会同时执行,对我来说非常奇怪)。我希望每个组只有一种任务在同时执行,其他任务必须等待正在处理的任务完成。我希望通过向队列中的消息给予不同的GroupID来管理并发处理。我是通过Node.js中的aws-sdk向队列发送消息的。可以有人帮我吗?

profile picture
专家
已提问 5 个月前4 查看次数
1 回答
0

【以下的回答经过翻译处理】 我猜测您在Lambda事件源映射中将缓冲区大小设置为大于1。当您使用FIFO队列时,仍然可以通过相同的消费者一次从队列中读取多个消息。这个想法是,消费者知道按顺序处理这些消息。如果您不想要这样,只需将批处理大小设置为1即可。

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则