根据消息组 ID 为 SQS FIFO 队列授予权限?



我正在构建一个向外部系统发送命令的系统(所有系统都相同,但位置和ID不同)。

命令将发送到 FIFO SQS 队列,外部系统将从该队列中读取和删除。

目前的计划是为每个外部系统创建一个队列,所以我只有一个 Lambda 在数据库系统表更改时更新队列列表。

但是我可以看到 SQS FIFO 支持消息组 ID,所以我想知道我是否应该只有一个队列,其中所有系统都只从自己的消息组 ID 读取。

我喜欢这个解决方案的简单性 - 但是,我看不到一种方法来限制对特定消息组的读取和删除消息的访问,这意味着如果一个外部系统遭到入侵,其凭据可用于劫持所有外部系统的共享队列,因此,删除所有内容。

是否有解决方法,以便我可以以任何方式为特定队列和消息组 ID 设置一些权限?

我还担心缺少仅清除一组消息而不是整个队列的选项。

您无法从 FIFO 队列中的特定消息组读取"来自",并且没有相关权限。

消息组是不透明的标签,用于告诉 FIFO 队列是否必须以相对于彼此的严格 FIFO 顺序将任何两条消息传递给使用者。 如果两条消息共享同一消息组,则必须对它们进行严格排序,但不需要对具有不同消息组 ID 的两条消息进行严格排序。

当存在并行的相同使用者时,此功能允许更快地对消息进行整体处理,因为如果没有此功能,则任何时候都可能只有一个使用者处理消息,并且队列的总体吞吐量将限制为单个使用者处理消息的速度(因为只要单个消息在传输中,就不会将任何消息传递给另一个使用者)。

消息组标识

指定消息属于特定消息组的标签。属于同一消息组的消息始终按照相对于消息组的严格顺序逐个处理(但是,属于不同消息组的消息可能会不按顺序处理)。

[...]

如果需要一组有序消息,请为发送到 FIFO 队列的消息提供相同的消息组 ID。

https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues.html

另请注意,虽然ReceiveMessageAPI 允许您请求随每条消息一起返回消息组 ID,但它没有用于指定要从哪个消息组 ID 接收消息的规定,因为这不是此功能的目的。

最新更新