【发布时间】:2015-07-28 11:21:23
【问题描述】:
我想知道是否有办法设置 RabbitMQ 或 Redis 与 Celery 一起使用,这样当我将任务发送到队列时,它不会进入任务列表,而是进入一组任务根据我的任务的有效负载进行键控,以避免重复。
这是我的设置以获取更多上下文: 蟒蛇+芹菜。我已经尝试过 RabbitMQ 作为后端,现在我使用 Redis 作为后端,因为我不需要 100% 的可靠性、更易于使用、内存占用少等。
我有大约 1000 个 id 需要重复完成工作。我的数据管道的第 1 阶段由调度程序触发,它为第 2 阶段输出任务。这些任务仅包含需要完成工作的 id,实际数据存储在数据库中。我可以运行任何第 1 阶段和第 2 阶段任务的组合或序列而不会造成伤害。
如果第 2 阶段没有足够的处理能力来处理第 1 阶段输出的任务量,我的任务队列就会不断增长。如果任务队列使用集合而不是列表作为底层数据结构,则不必如此。
是否有现成的解决方案可以从列表切换到作为分布式任务队列的集合?芹菜能做到这一点吗?我最近看到 Redis 刚刚发布了一个队列系统的 alpha 版本,所以还没有准备好用于生产环境。
我应该以不同的方式构建我的管道吗?
【问题讨论】:
-
使用 RabbitMQ,您可以为每个唯一 ID 延迟创建队列,最大队列深度 (
x-max-length) 为 1 。发布和订阅 1000 个不同的队列需要额外的内务处理,但会根据需要删除重复项。 -
这正是我正在寻找的那种解决方法类型的逻辑,但这种特殊的解决方案似乎很乏味,而且我更愿意远离 RabbitMQ。不过,感谢您的创意!
标签: python redis rabbitmq celery message-queue