6

我需要设置一个作业/消息队列,并可以选择为任务设置延迟,以便空闲工作人员不会立即接收它,而是在一定时间后(可能因任务而异)。我研究了几个 linux 队列解决方案(rabbitmq、gearman、memcacheq),但似乎没有一个提供开箱即用的功能。

关于如何实现这一目标的任何想法?

谢谢!

4

2 回答 2

11

我使用 BeanstalkD 效果很好,在插入新作业时使用延迟选项等待几秒钟,直到该项目可以被保留。

如果您要进行长期延迟(例如 30 秒以上),或者执行的作业有些重要(稍后执行),那么它还有一个二进制日志记录系统,因此任何守护程序崩溃仍然会记录该作业. 也就是说,我已经通过 Beanstalkd 实例放置了数十万个实时工作,而我编写的工作人员总是比服务器更成问题。

于 2010-03-03T13:15:04.770 回答
1

您可以使用 AMQP 代理(例如 RabbitMQ),而我有一个“代理”(例如使用 pyton-amqplib 构建的 python 进程),它位于交换中并拦截特定消息(特定routing_key);一旦计时器过去了,就用不同的routing_key.

我意识到这意味着“翻译/映射” routing keys,但它有效。使用 RabbitMQ 和 python-amqplib 非常简单。

于 2010-03-02T15:11:02.573 回答