繁体   English   中英

以 AWS SQS 和 Lambda 作为消费者的优先级队列

[英]Priority queue with AWS SQS and Lambda as consumer

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

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

现在为了迎合基于优先级(高、中、低)的消息消费的一个特定特征(基于消息中设置的“优先级”数字),我想有一组 3 个队列,其中每个队列是属于不同的优先级。 在最高优先级队列上,开箱即用的基于 lambda 的消息消费将继续发生。 批处理将以 5 分钟的间隔继续运行。 每个从中低优先级队列中提升一些消息。 这个batch process的逻辑暂时没有想到,但是可以是任何东西,比如抓取10条中等优先级的消息和5条低优先级的消息,都超过1小时,然后将它们提升到高优先级队列中,让它们可以被上面提到的开箱即用的基于 lambda 的消息消费所消费。

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

聚苯乙烯

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

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

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

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

正如您首先建议的那样,AWS 推荐的方法是拥有 3 个单独的 SQS 队列,即每个优先级一个。 请参阅页面底部的建议 无论消费什么,每个队列都必须单独协调,因为没有一个队列“知道”它们固有的优先级是什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM