以 AWS SQS 和 Lambda 作为使用者的优先级队列

gar*_*tiz 3 amazon-sqs amazon-web-services aws-lambda

我有一个消息传递用例问题。

截至目前,我们在 AWS SQS 中有一个队列,例如origQueue,并且该队列上有开箱即用的基于 lambda 的消息消费。

现在,为了满足基于优先级(高、中、低)的消息消耗的一个特定功能(基于消息中设置的“优先级”数字),我正在考虑拥有一组 3 个队列,其中每个队列是属于不同的优先级。在最高优先级队列上,开箱即用的基于 lambda 的消息消费将继续发生。批处理会以 5 分钟的间隔持续运行。每个都提升中低优先级队列中的一些消息。目前还没有想到这个批处理的逻辑,但它可以是任何东西,比如拾取 10 条中优先级消息和 5 条低优先级消息,它们的老化时间都超过 1 小时,并将它们提升到高优先级队列,以便它们可以通过上述开箱即用的基于 lambda 的消息消耗来消耗。

所以在这样做之前,我只是想收集其他潜在的想法。是否有任何开箱即用的 AWS 功能或任何模式来解决这种基于优先级的消息消费问题?

聚苯乙烯

我想出的另一种(未选择的)方法是考虑优先级将项目“插入”队列中,这将使队列始终按优先级排序。但这种“运行时动态插入”似乎并不可行,因为传入消息流始终处于开启状态。

小智 5

现在有用于 FIFO(先进先出)SQS 队列的消息组的概念。这允许您使用特定 ID 向 SQS 队列发送消息,其中队列将按照接收新项目的顺序自动为您分组。

交互代码可以使用消息组参数查询整个 SQS 队列,并将接收该队列中的任何消息。使用 ReceiveMessage (提供 Node.js 链接)之类的工具,可以提供参数“MessageGroupId”,然后该参数将获取一条或多条具有匹配“MessageGroupId”的消息(按接收顺序)。

一个基本的高级概念是让代码始终检查高优先级消息组,直到确定它为空,然后移动到中(然后是低)优先级队列以处理那里的工作,直到更高优先级中出现新条目。找到优先级队列。