阻止消息队列(RabbitMQ / SQS)

时间:2016-05-19 23:10:06

标签: architecture rabbitmq amazon-sqs

我有一个应用程序,我将视频连接在一起,以形成更长和更长的蒙太奇。我正在尝试使用队列来执行连接作业,但我遇到了一个问题。

我不能让两个视频同时连接到同一个视频(否则我会丢失数据),因此普通队列将无效(我有多个转码服务器)。

我认为我需要一个支持'阻塞'的队列(即,当我正在处理此视频的连接时,阻止所有其他尝试将连接作业从此队列拉出,直到我完成)。然后,我会为每个目标视频设置一个单独的队列,这可能需要动态创建队列,因为新的视频将成为连接的目标。

我已经研究过RabbitMQ了。它似乎可能有用,因为它支持“独占”连接。问题是似乎没有办法获得所有可用队列的列表,所以现在我不知道如何处理动态生成的队列。

我非常感谢有关如何解决此问题的反馈。我完全偏离了基地吗?

2 个答案:

答案 0 :(得分:1)

你真的不想阻止,你只是想避免处理某个特定视频片段,如果其他东西已经这样做了。您可能希望通过失败并重试来实现此功能。这在SQS vs RabbitMQ中略有不同。

基本上,您需要一个可以在视频上创建的锁定,如果其他人拥有该锁定,您希望使该消息失败,并且在某个超时后再次尝试。您将需要设置延迟并重试足够高的最坏情况(最大处理时间*最大段数),并放入dead letter queue来处理最终失败。

那里有很多很好的Distributed Locking实现。

答案 1 :(得分:1)

RabbitMQ management client插件有一个API来获取所有可用队列的列表:/api/queues

点击该页面上API的链接以获取更多详细信息(尚未将链接放在答案中,因为链接将在新API版本中快速过时)。