python - 消费者之后的 RabbitMQ 清理

标签 python rabbitmq

我在处理以下情况时遇到问题:

我有一个出版商想要上传大量二进制信息(如图像),所以我希望它保存图像并上传路径或对该文件的一些引用。

我有多个不同的消费者,他们正在读取这个 MQ 并做不同的事情。 为此,我只需将信息以扇出形式发送到某个交换器,并为每个不同的消费者定义几个队列。

这可能工作得很好,除了 FS 的垃圾处理。由于没有人负责删除保存的图像。我需要某种方法来定义一个钩子(Hook),以指示每个 消费者完成消费来自交换的消息的时间?也许设置一些回调来清除交换中的消息?

一些注意事项:

  1. 一切都发生在本地,为简单起见,我们可以假设一切都在同一个 FS 上。

  2. 我知道我可以简单地让发布者保存图像并为不同的消费者提供 FS 链接,但这种解决方案是有问题的,因为我希望发布者不注意消费者。我不想在每次使用新消费者(或可以删除​​消费者)时更新发布者的代码。

  3. 我正在使用 Python。 (鼠兔模块)

  4. 我是消息队列的新手,所以如果您有更好的建议来完成任务,我很乐意了解它。

最佳答案

一旦消费者处理了图像,就会发布消息 FileProcessed,其中包含与文件相关的信息。该消息可以由负责清理消息的另一个消费者拾取,以便消费者将删除该文件。

此外,请确保您的消息在发生故障时重新排队,这样它们将在稍后被拾取并重试处理。确保重试次数受到限制,当达到限制时将消息路由到死信交换。

下面是一些有用的链接:

关于python - 消费者之后的 RabbitMQ 清理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61987921/

相关文章:

python - 这是在Python中获取窗口大小的方法

spring-boot - RabbitMQ在事务中发送消息

c# - 批量消费消息——RabbitMQ

java - Spring RabbitMQ - 是一个没有交换的队列配置

erlang - RabbitMQ (beam.smp) 和高 CPU/内存负载问题

python - 无法安装 PIL 1.7

python - pyparsing:忽略任何不匹配的标记

python - UnicodeDecodeError,python中Snowball stemming算法的ascii处理

python - Heroku 部署错误 : No matching distribution found for en-core-web-sm

security - 如何在 Multi-Tenancy 系统中的 RabbitMQ 中使队列私有(private)/安全?