【发布时间】:2010-03-02 15:07:20
【问题描述】:
我需要设置一个作业/消息队列,其中包含为任务设置延迟的选项,以便空闲工作人员不会立即接收它,而是在一定时间后(可能因任务而异)。我研究了几个 linux 队列解决方案(rabbitmq、gearman、memcacheq),但似乎没有一个提供开箱即用的功能。
关于如何实现这一目标的任何想法?
谢谢!
【问题讨论】:
标签: message-queue rabbitmq gearman beanstalkd
我需要设置一个作业/消息队列,其中包含为任务设置延迟的选项,以便空闲工作人员不会立即接收它,而是在一定时间后(可能因任务而异)。我研究了几个 linux 队列解决方案(rabbitmq、gearman、memcacheq),但似乎没有一个提供开箱即用的功能。
关于如何实现这一目标的任何想法?
谢谢!
【问题讨论】:
标签: message-queue rabbitmq gearman beanstalkd
我使用 BeanstalkD 效果很好,在插入新作业时使用延迟选项等待几秒钟,直到该项目可供保留。
如果您正在执行较长时间的延迟(例如 30 秒以上),或者任务执行起来有些重要(尽管稍后),那么它还有一个二进制日志记录系统,因此任何守护进程崩溃仍然会有记录的工作。也就是说,我已经通过 Beanstalkd 实例放置了数十万个实时作业,而我编写的工作人员总是比服务器更成问题。
【讨论】:
您可以使用 AMQP 代理(例如 RabbitMQ),而我有一个“代理”(例如使用 pyton-amqplib 构建的 python 进程),它位于交换器上并拦截特定消息(特定 routing_key);计时器结束后,使用不同的routing_key 在 Exchange 上发回消息。
我意识到这意味着“翻译/映射”routing keys 但它有效。使用 RabbitMQ 和 python-amqplib 非常简单。
【讨论】: