具有延迟的简单可扩展工作/消息队列

时间:2010-03-02 15:07:21

标签: message-queue rabbitmq gearman beanstalkd

我需要设置一个作业/消息队列,其中包含为任务设置延迟的选项,以便免费工作人员不会立即接收它,但是在一段时间后(可能因任务而异)。我查看了几个linux队列解决方案(rabbitmq,gearman,memcacheq),但它们似乎都没有提供开箱即用的功能。

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

谢谢!

2 个答案:

答案 0 :(得分:11)

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

如果您正在进行长期延迟(超过30秒),或者作业有点重要(abeit稍后),那么它还有一个二进制日志系统,这样任何守护进程崩溃都会有记录这份工作。也就是说,我通过Beanstalkd实例放置了数十万个实时作业,而我写的工作人员总是比服务器更有问题。

答案 1 :(得分:1)

您可以使用AMQP代理(例如RabbitMQ),并且我有一个“代理”(例如使用pyton-amqplib构建的python进程),它位于交换机上,拦截特定的消息(特定routing_key);一旦计时器过去,请使用其他routing_key发送回交换消息。

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