当前位置: 首页 > 知识库问答 >
问题:

Amazon SQS唯一消息

阚通
2023-03-14

我使用SQS作为视频编码的队列,并希望确保每个视频只执行一次编码。

SQS工作得很好,因为当消息排队时,它只能由单个线程接收。然而,对于相同的视频/编码,可能会向队列发送多条消息,这意味着对于特定的“编码”队列,消息内容将是相同的。

是否需要消除重复以确保对于特定队列,队列中的消息或从队列接收的消息是唯一的?

我想的一个选择是在消息发送时为每种编码类型创建一个新队列。所以队列可以命名为codeing-Video-id,它只有一条消息,我可以检查以确保队列还不存在。唯一的“问题”是可能会创建1000到10个这样的队列。

共有3个答案

慕麒
2023-03-14

你建议的解决方案是一个糟糕的设计,即使它可能或不可能。下面是我解决这个问题的方法。

我将使用一个数据库(可能是DynamoDB)根据视频的编码类型存储一个唯一的id,并添加一个名为status的列。一旦用户点击转换按钮,首先,我将检查数据库。如果项目不可用,则会将新记录推送到数据库,状态为“正在转换”。然后将工作推入SQS。处理完工作量后,将数据库的状态更改为“已完成”。如果用户再次单击转换按钮,则根据数据库中的状态变量显示结果。

杨超
2023-03-14

没有办法确保SQS队列中消息的唯一性,或者为此进行排序。此外,拥有太多队列不是一个好主意。

在我看来,您需要在系统中添加另一个组件。某种元数据服务就足够了。它可以这样工作:

  • 创建编码任务时(在将其添加到SQS之前),可以将其写入元数据服务

如果将这些编码作业的输出上传到S3,则可以有效地将S3本身用作元数据服务。如果每个视频都有一个唯一的名称/id,您可以使用该唯一id的键将输出保存在S3中。或者将其设置为S3元数据键值(这会使文件更难找到,因为您不能仅查询S3元数据服务)。然后,当工作线程接收到编码任务时,它会检查文件是否已经存在于S3上,在这种情况下,它会从SQS中删除消息并跳过任务。

如果不将输出保存到S3,则可能需要使用某种数据库。Dynamo DB可能在速度和成本方面有所帮助。

希望这有帮助!:)

锺离逸春
2023-03-14

在我看来,创建无限数量的队列,每个队列中只有一条消息,这是一个非常糟糕的设计,即使理论上可行。

如果是我,我会尽量确保每个视频都有某种唯一标识符,即使用户“双击”过程按钮,这也是一样的。

我将查看一个系统,其中视频,具有唯一名称(例如guid)上载到S3,消息被放入队列,您的线程从队列中提取消息并进行编码,然后将视频写回另一个S3存储桶,但具有相同的基本名称。

在处理任何视频之前,我会首先检查“输出桶”,看看那里是否已经有一个编码的视频,带有匹配的名称,如果是-我会跳过重新处理并删除消息。

如果一切都在EC2本地磁盘上运行(而您没有使用S3),那么可以使用硬盘上的输入和输出目录来完成同样的操作(但这将假设多台机器没有进行处理)。

重要的是要记住,同样的消息有可能由SQS传递——即使用户只提交了一次。这种情况会发生,尽管很少,所以无论你设置什么系统,你都需要确保如果/当你收到偶尔的副本时,它不会破坏任何东西。

 类似资料:
  • 我正在尝试取消一个悬而未决的意图,所以永远只剩下一个。我的requestCode是“1”或“2”,这取决于服务是启动还是停止。启动警报的PendingIntert如下所示(停止几乎相同): 根据我所读到的内容,pendingIntent必须完全相同才能被取消,而requestCode为1应该满足这一需要。这可能实际上起到了预期的作用,但警报重新触发多天的日志文件显示了两个启动/停止警报(各发生7次

  • 我需要你的帮助。我正在用MQTT创建一个程序,它必须执行写在文件上的命令,并将结果发送到主题。我已经设法在终端上执行命令并打印结果,但是当我必须通过MQTT发送它时,它会创建两条消息,是否可以只发送带有结果的消息?我该怎么办?谢谢,我将放置代码,用于读取执行的命令的结果以及它发送给我的两条消息。

  • 以下两者之间有区别吗: 以及: 在这两种情况下,名称是否唯一?索引唯一时意味着什么? 编辑:Postgres是唯一的约束,而索引没有回答我的问题。它考虑了FK的情况。我的问题与FK无关。我只想知道在这个例子中,这两个操作是否等价,其中不涉及FK。

  • 问题内容: 就性能而言,MySQL唯一索引和非唯一索引有什么区别? 假设我要在2列的组合上创建索引,并且该组合是唯一的,但是我创建了一个非唯一的索引。这会对MySQL使用的性能或内存产生重大影响吗? 同样的问题, 主 键和 唯一 索引之间有区别吗? 问题答案: UNIQUE和PRIMARY KEY是 约束 ,而不是索引。尽管大多数数据库通过使用索引来实现这些约束。除了索引之外,约束的额外开销也微不

  • 问题内容: 我需要一个可以根据键查找值的集合,反之亦然。每个值都有一个键,每个键都有一个值。有没有可以立即使用的数据结构呢? 问题答案: 该BIMAP从谷歌番石榴看起来会适合你。 双向映射(或“双向映射”)是一种保留其值以及其键的唯一性的映射。此约束使bimap可以支持“反向视图”,这是另一个bimap,它包含与此bimap相同的条目,但具有相反的键和值。 或来自Apache Commons Co

  • 这是我的限制: 该查询证明约束实际上不起作用: 下面是输出: 为什么唯一性没有被强制执行?