我在处理以下情况时遇到问题:
我有一个出版商想要上传大量二进制信息(如图像),所以我希望它保存图像并上传路径或对该文件的一些引用。
我有多个不同的消费者,他们正在读取这个 MQ 并做不同的事情。 为此,我只需将信息以扇出形式发送到某个交换器,并为每个不同的消费者定义几个队列。
这可能工作得很好,除了 FS 的垃圾处理。由于没有人负责删除保存的图像。我需要某种方法来定义一个钩子(Hook),以指示每个 消费者完成消费来自交换的消息的时间?也许设置一些回调来清除交换中的消息?
一些注意事项:
一切都发生在本地,为简单起见,我们可以假设一切都在同一个 FS 上。
我知道我可以简单地让发布者保存图像并为不同的消费者提供 FS 链接,但这种解决方案是有问题的,因为我希望发布者不注意消费者。我不想在每次使用新消费者(或可以删除消费者)时更新发布者的代码。
我正在使用 Python。 (鼠兔模块)
我是消息队列的新手,所以如果您有更好的建议来完成任务,我很乐意了解它。
最佳答案
一旦消费者处理了图像,就会发布消息 FileProcessed
,其中包含与文件相关的信息。该消息可以由负责清理消息的另一个消费者拾取,以便消费者将删除该文件。
此外,请确保您的消息在发生故障时重新排队,这样它们将在稍后被拾取并重试处理。确保重试次数受到限制,当达到限制时将消息路由到死信交换。
下面是一些有用的链接:
关于python - 消费者之后的 RabbitMQ 清理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61987921/