我需要设置一个作业/消息队列,其中包含为任务设置延迟的选项,以便免费工作人员不会立即接收它,但是在一段时间后(可能因任务而异)。我查看了几个linux队列解决方案(rabbitmq,gearman,memcacheq),但它们似乎都没有提供开箱即用的功能。
关于如何实现这一目标的任何想法?
谢谢!
答案 0 :(得分:11)
我使用了BeanstalkD效果很好,使用插入新作业的延迟选项等待几秒钟,直到该项目可以保留。
如果您正在进行长期延迟(超过30秒),或者作业有点重要(abeit稍后),那么它还有一个二进制日志系统,这样任何守护进程崩溃都会有记录这份工作。也就是说,我通过Beanstalkd实例放置了数十万个实时作业,而我写的工作人员总是比服务器更有问题。
答案 1 :(得分:1)
您可以使用AMQP代理(例如RabbitMQ),并且我有一个“代理”(例如使用pyton-amqplib构建的python进程),它位于交换机上,拦截特定的消息(特定routing_key
);一旦计时器过去,请使用其他routing_key
发送回交换消息。
我意识到这意味着“翻译/映射”routing keys
但它确实有效。使用RabbitMQ和python-amqplib非常简单。